1.5 KiB
1.5 KiB
Leetcode Move-Zeroes
2022-07-11 09:55
Algorithms:
#algorithm #two_pointers #array_in_place_operation
Data structures:
#DS #array
Difficulty:
#coding_problem #difficulty-easy
Additional tags:
#leetcode
Revisions:
N/A
Related topics:
Links:
Problem
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.
Follow up: Could you minimize the total number of operations done?
Examples
Example 1:
Input: nums = [0,1,0,3,12] Output: [1,3,12,0,0]
Example 2:
Input: nums = [0] Output: [0]
Constraints
Constraints:
1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1
Thoughts
[!summary] This is a #array_in_place_operation problem.
Because the data can be overwritten, and zeros can be predicted in the result array, I use in-place array operations.
Solution
class Solution {
public:
void moveZeroes(vector<int> &nums) {
// Tow pointers, since data can be overwritten and one pointer is faster
// than another.
int num = 0;
for (int i = 0; i < nums.size(); i++) {
if (nums[i] != 0) {
nums[num++] = nums[i];
}
}
for (int j = num; j < nums.size(); j++) {
nums[j] = 0;
}
}
};