0
点赞
收藏
分享

微信扫一扫

283. 移动零(快慢指针)


题目要求

283. 移动零(快慢指针)_最优解


算法思想:

1.使用快慢指针,初始都设为0,慢指针指向的位置是快指针指向的非0元素的位置。
2.最优解法是直接把非0元素赋值到慢指针的位置,每次操作完快指针指向的非0元素后,都要使慢指针+1.然后最后再将数组后面的位置赋值为的0

代码实现

class Solution {
// public void moveZeroes(int[] nums) {

// //快慢指针,时间O(n),空间O(1)
// if(nums.length == 0 || nums == null)
// return;

// int slow = 0;
// for(int fast = 0; fast < nums.length; fast++){
// if(nums[fast] != 0){
// //相等时不交换,减少交换次数
// if(slow != fast){
// int tmp = nums[fast];
// nums[fast] = nums[slow];
// nums[slow] = tmp;

// }
// //操作完快指针指向的当前元素,慢支针+1
// slow++;
// }
// }

// }

public void moveZeroes(int[] nums) {
if(nums.length == 0 || nums == null)
return;

int slow = 0;
for(int fast = 0; fast < nums.length; fast++){
if(nums[fast] != 0){
//相等时不赋值,减少操作次数。
if(slow != fast){
nums[slow] = nums[fast];

}
//操作完快指针指向的当前元素,慢指针+1
slow++;
}
}
//将slow指向的后续的数组元素赋值为0(slow后面的元素已经被移动到前面)
for(int i = slow; i < nums.length; i++){
nums[i] = 0;
}

}


}


举报

相关推荐

0 条评论