题目名称
- Move Zeroes
题目描述
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:
Input: nums = [0,1,0,3,12]
Output: [1,3,12,0,0]
Example 2:
Input: nums = [0]
Output: [0]
Constraints:
1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1
初试思路
1、边遍历数组边移动非零值,移动步数由记录的遇到过的0的个数而决定。
2、和1类似,但更是双指针
初试代码
// 我的代码1
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int step = 0;
for(int i=0; i<size(nums);i++){
if(nums[i] == 0){
step++;
}else{
nums[i-step] = nums[i];
}
}
for(int j = 0; j<step; j++){
nums[size(nums)-1-j] = 0;
}
}
};
// 我的代码2
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int j=0;
for(int i=0; i<nums.size();i++){
if(nums[i] != 0){
nums[j] = nums[i];
j++;
}
}
while(j<size(nums)){
nums[j]=0;
j++;
}
}
};
推荐思路
推荐代码
// 别人的代码