双指针法
用两个同向或者反向的指针来代替两重循环。
提醒:不要老想着用同向双指针,有时候,相向双指针更容易解决问题。
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; } }
|