- Notifications
You must be signed in to change notification settings - Fork24
Open
Labels
Description
双指针
题目要求将所有 0 移动到数组的末尾,同时还要保持非零元素的相对顺序。
在此基础上附加了两个条件:
1.必须在原数组上操作,不能拷贝额外的数组。
2.尽量减少操作次数。
我们可以借助双指针来进行求解,求解过程如下:
1.初始化双指针 i 、j 指向数组头部索引 0。
2.将 i 指针不断向右移动,j 指针负责提供交换的位置,当遇到非 0 数字时,将两个指针位置的数字交换,同时继续向右边移动两个指针。这样交换可以保证题目要求的非 0 数字相对顺序不变。
3.当遇到 0 时,向右移动 i 指针,j 指针不动。
4.循环完成时即可将所有的 0 移动到数组的末尾。
constmoveZeroes=function(nums){leti=0,j=0;while(i<nums.length){if(nums[i]!=0){[nums[i],nums[j]]=[nums[j],nums[i]];i++;j++;}else{i++;}}}
- 时间复杂度: O(n)
- 空间复杂度: O(1)