您的位置:首页 > 娱乐 > 明星 > leetcode 283.移动零

leetcode 283.移动零

2024/10/6 16:08:33 来源:https://blog.csdn.net/m0_73917165/article/details/140655653  浏览:    关键词:leetcode 283.移动零

思路:在原本数组里面操作,我们可以借鉴一下冒泡排序的交换操作。

一旦我们遇到0,那么这个时候我们就开始冒泡排序的交换操作,把它换到最后面。

注意:我们在交换之后,第一重循环会直接往下进行判断数,但是我们交换之后,会有数往前去,就相当于我们把0扔到后面了,整体数组是向前移动的。所以我们还是需要从原先的位置判断,这个时候i--,下一次操作的时候还是在原位置进行判断新的数。

还有就是,在我们把0都扔到最后面之后,再次判断末尾的时候会有问题,因为我们每次交换操作之后,会把i--,但是在末尾全是0的时候,我们其实不用进行交换了,也就是交换操作不会进行,但是我们的i还是会递减,这样就造成了一个死循环。

所以我们增加了一个计数变量cnt,每次扔一个0,就加1,然后我们把它放在循环条件里面,减去它,这样我们就不会遍历到后面已经被我们扔到末尾的0了,死循环就不会产生了。

class Solution {public void moveZeroes(int[] nums) {int cnt=0;for(int i=0;i<nums.length-cnt;i++){if(nums[i]==0){for(int j=i;j<nums.length-1-cnt;j++){int tmp=nums[j+1];nums[j+1]=nums[j];nums[j]=tmp;}cnt++;i--;}}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com