起初,刚开始看到这个题,第一想法就是一个遍历把0过滤掉就行了,
但是我们尊重原题的意愿,我们用双指针!!!
他是说要非零数按原来的顺序排着,所以只能一步一步从左边开始
我们用两个指针a,b 用a来往前走,去找非0,一旦找到非0,就和b下标的数互换
此时b下标就是非0 而a下标是0,此时就需要一起往前进一了 不然就陷入死循环
刚开始,我回想,起始状态会不会有什么影响,但是确实是多虑了
你看 假如刚开始是0 按情况来 a是0 而不是非0 所以就往下找,然后当找到第一个非零,
就能交换,不会有任何影响,而且是由于从左往右的,所以顺序也不会变
var moveZeroes = function(nums) {
let a=0,b=0; // 定义两个指针
while(a!==nums.length){
if(nums[a] !== 0){ //用a去找非0
nums[b] = nums[a]; // 找到了就互换
if(a !== b) // 但是有个细节,a不能与b相等 注意!!!
nums[a] = 0 // 这里是交换 因为在a和b之间 已经确定都是0所以直接赋值0
a++; // 操作完后,就一起向前挪到一格
b++; //
}else{
a++ //如果没有找到 a就继续往下移动寻找
}
}
return nums
};
004 --- 移动零 ---力扣热题100题
于 2024-03-06 10:33:57 首次发布