283. Move Zeroes*
https://leetcode.com/problems/move-zeroes/
题目描述
Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements.
Example:
Input: [0,1,0,3,12]
Output: [1,3,12,0,0]
Note:
You must do this in-place without making a copy of the array.
Minimize the total number of operations.
解题思路
使用双指针, 类似于 27. Remove Element*.
C++ 实现 1
时间复杂度为 O ( N ) O(N) O(N), 空间复杂度为 O ( 1 ) O(1) O(1)
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int k = -1;
for (int i = 0; i < nums.size(); ++i) {
if (nums[i] != 0)
std::swap(nums[++k], nums[i]);
}
}
};
本文详细解析了LeetCode上的经典题目283. Move Zeroes,介绍了一种使用双指针的解决方案,该方法能在O(N)的时间复杂度和O(1)的空间复杂度下,将数组中所有零元素移动到末尾,同时保持非零元素的相对顺序不变。

104

被折叠的 条评论
为什么被折叠?



