283. 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:
Example 2:
Solution:
class Solution {
public void moveZeroes(int[] nums) {
int n = nums.length;
int left = 0;
for (int right = 0; right < n; right++){
if (nums[right] != 0){
int tmp = nums[left];
nums[left] = nums[right];
nums[right] = tmp;
left++;
}
}
return;
}
}
// TC: O(n)
// SC: O(1)
class Solution {
public void moveZeroes(int[] nums) {
int n = nums.length;
int left = 0;
for (int i = 0; i < n; i++){
int cur = nums[i];
if (nums[i] == 0){
continue;
}
swap(nums, left, i);
left++;
}
return;
}
private void swap(int[] nums, int i, int j){
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}
// TC: O(n)
// SC: O(1)
class Solution {
public void moveZeroes(int[] nums){
// base case
if (nums == null || nums.length <= 1){
return;
}
int slow = 0;
int fast = 0;
while(fast < nums.length){
if (nums[fast] != 0){
nums[slow] = nums[fast];
slow++;
fast++;
}else{
// nums[slow] == 0
fast++;
}
}
while(slow < nums.length){
nums[slow] = 0;
slow++;
}
}
}
// TC: O(n)
// SC: O(1)
/*
[1,3,12,3,12]
s
f
*/