文章目录
10.移动零
快慢指针解决: 快指针遇到0之后,快指针++,慢指针不动。遇到非零数字,将快指针的下表赋值给慢指针,快指针和慢指针都++
最后将数组中空余的位置的都设置为0;
图解:
f f f f f f---------快指针
0 3 4 6 0 7
3 4 6 7 0 0
s s s s-----------慢指针
代码实现如下:
class Solution {
public void moveZeroes(int[] nums) {
int fast = 0, slow=0;
while (fast<nums.length){
if(nums[fast]==0){
fast++;
}else {
nums[slow++] = nums[fast++];
}
}
for (int i = slow;i<nums.length;i++){
nums[i] = 0;
}
}
}
11.删除有序数组的重复项
右指针指向的值等于左指针指向的值,左指针不动,右指针右移一步;
如果右指针指向的值不等于左指针指向的值,左右指针往前右移一步,然后右指针指向的值赋给左值针。
class Solution {
public int removeDuplicates(int[] nums) {
if(nums.length==0){
return 0;
}
int left = 0;
for(int right = 1;right < nums.length; right++){
if(nums[right]!=nums[left]){
nums[++left]=nums[right];
}
}
return left+1;
}
}