283. 移动零(快慢指针)

网友投稿 640 2022-10-14

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; } } }

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:torChat- 加密聊天程序
下一篇:JVM第二天 -(二)垃圾回收
相关文章

 发表评论

暂时没有评论,来抢沙发吧~