问题描述
Given an integer array nums, move all 0‘s to the end of it while maintaining the relative order of the non-zero elements.
Note that you must do this in-place without making a copy of the array.
Example 1:
1 2
| Input: nums = [0,1,0,3,12] Output: [1,3,12,0,0]
|
Constraints:
1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1
解答
方法一:双指针
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
const moveZeroes = function (nums) { let left = 0 let right = 0
while (right < nums.length) { if (nums[right]) { let temp = nums[right] nums[right] = nums[left] nums[left] = temp left++ } right++ } }
|
方法二:双指针改进
既然要处理的数字是0,那就不必交换,直接覆盖,末尾补零即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
const moveZeroes2 = function (nums) { let left = 0 let right = 0
while (right < nums.length) { if (nums[right]) { nums[left++] = nums[right] } right++ } while (left < nums.length) { nums[left++] = 0 } }
|