LeetCode 283. 移动零
题目描述
🔥 283. 移动零
思路分析
我们可以使用双指针的方法来解决这个问题:
- 使用一个指针
i
记录当前非零元素应该放置的位置。- 使用另一个指针
cur
遍历数组。- 当
cur
指针遇到非零元素时,将其与i
指针位置的元素交换,并将i
指针向前移动。- 最终,所有的非零元素都会被移动到数组的前面,剩下的位置填充为零。
具体步骤如下:
- 初始化指针
i
为 0,表示当前非零元素应该放置的位置。- 遍历数组
nums
,使用指针cur
进行遍历。- 如果
nums[cur]
不为 0,则将nums[cur]
与nums[i]
交换,并将i
向前移动一位。- 遍历结束后,所有的非零元素都已经被移动到数组的前面,零元素被移动到数组的末尾。
参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
func moveZeroes(nums []int) {
i := 0
for j := 0; j < len(nums); j++ {
if nums[j] != 0 {
nums[i] = nums[j]
i++
}
}
for i < len(nums) {
nums[i] = 0
i++
}
}
1
2
3
4
5
6
7
8
9
10
11
func moveZeroes(nums []int) {
i := 0
// 遍历数组,将非零元素移动到前面
for cur := 0; cur < len(nums); cur++ {
if nums[cur] != 0 {
nums[i], nums[cur] = nums[cur], nums[i]
i++
}
}
}
- 时间复杂度:O (N),其中 N 是数组的长度。我们只遍历了数组一次。
- 空间复杂度:O (1),我们只使用了常数级别的额外空间。
1
write your code here
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用