LeetCode 283: Move Zeroes

题目链接:
https://leetcode.cn/problems/two-sum/
解题思路:
具体来说,我们可以使用两个指针i和j,其中i指向数组的下一个位置,可以用于添加非零元素,而j用于遍历整个数组。具体步骤如下:

  • 我们让i指向数组的第一个元素,j指向数组的第二个元素。
  • 一旦我们找到了一个非零元素,我们就将其移到数组的i位置,并将i指针向后移动一位,以便添加更多的非零元素。
  • 然后我们继续遍历数组,找到下一个非零元素,将其移到i指向的位置,并将i指针向后移动一位。我们一直重复这个过程,直到我们遍历完整个数组。
  • 最后,我们将i指针指向的位置以及之后的所有元素全部设置为0,以确保所有的0都被移动到数组的末尾。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func moveZeroes(_ nums: inout [Int]) {
// 定义慢指针i和快指针j
var i = 0, j = 0
// 循环直到快指针j到达数组末尾
while j < nums.count {
// 如果当前数字不为0
if nums[j] != 0 {
// 将当前数字交换到慢指针i所指向的位置
nums.swapAt(i, j)
// 慢指针i向后移动一位
i += 1
}
// 快指针j向后移动一位
j += 1
}
}