思路:在原本数组里面操作,我们可以借鉴一下冒泡排序的交换操作。
一旦我们遇到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--;
}
}
}
}
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » leetcode 283.移动零
发表评论 取消回复