讨论/《数组类算法》 - 移动零 - 解题思路/
《数组类算法》 - 移动零 - 解题思路
共 15 个回复

所以快慢指针得出的思路是这样的,一开始本就需要将所有的非零元素按顺序一次放入数组,那么不如直接放置一个慢指针,在快指针检测是否非零的同时,为非零元素放置的位置做规划。

6

这个思路其实就是双指针,只是把其中的swap操作变成了后面填0.

1

class Solution {
public void moveZeroes(int[] nums) {
int left = 0;
int right = 1;
int temp = 0;
while(right <= nums.length-1){
if(nums[left] == 0 && nums[right] != 0){
temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
left++;
right++;
}
else if(nums[left] == 0 && nums[right] == 0){
right++;
}
else if(nums[left] != 0 && nums[right] == 0){
left++;
right++;
}
else if(nums[left] != 0 && nums[right] != 0){
left++;
right++;
}
}
}
}
image.png
双指针解题思路,如果遇到0元素和非零元素,就置换位置;数列的情况可以分为4中不同的形态,分别进性只针对移位操作即可

2

还可以再优化:

    p1 = 0

    for i, num in enumerate(nums):
        if num != 0:
            nums[p1] = num
            if i != p1:
                nums[i] = 0
            
            p1+=1
1
func moveZeroes(nums []int)  {
    index := -1
    for _, v := range nums {
        if v != 0 {
            index++
            nums[index] = v
        }
    }
    for j:=index+1; j < len(nums); j++ {
        nums[j] = 0
    }
}
1

其实就是双指针

双指针的思想还是用的不熟练。

我是思维慢,想的永点久,当看到别人给的思路才会豁然开朗,又觉得如此简单..

同方向的双指针

为什么不能下一页了?