双指针法

用两个同向或者反向的指针来代替两重循环。

在这里插入图片描述
提醒:不要老想着用同向双指针,有时候,相向双指针更容易解决问题。

LeetCode

27

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {

public int removeElement(int[] nums, int val) {

int j=0;
for(int i=0;i<nums.length;i++){

if(i!=j){

nums[j]=nums[i];
}
if(nums[i]==val){


}else{

j++;
}
}
return j;
}
}

283

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {

public void moveZeroes(int[] nums) {

int k=0;
for(int i=0;i<nums.length;i++){

if(nums[i]!=0){

nums[k]=nums[i];
k++;
}
}

for(int i=k;i<nums.length;i++){

nums[i]=0;
}
}
}

844

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
class Solution {

public boolean backspaceCompare(String s, String t) {

char[] ss=s.toCharArray();
char[] tt=t.toCharArray();
int k=0;
for(int i=0;i<s.length();i++){

if(s.charAt(i)!='#'){

ss[k]=ss[i];
k++;
}else{

if(k>0){

k--;
}
}
}
int res=k;
k=0;
for(int i=0;i<t.length();i++){

if(t.charAt(i)!='#'){

tt[k]=tt[i];
k++;
}else{

if(k>0){

k--;
}
}
}
if(k!=res){

return false;
}
else{

for(int i=0;i<k;i++){

if(tt[i]!=ss[i]){

return false;
}
}
}
return true;
}
}