【数组相关】283. 移动零

原题链接:https://leetcode-cn.com/problems/move-zeroes/



关键信息:

  • 将0移动到数组后方
  • 保证非零元素相对位置
  • 必须原地修改

解法类似于选择排序,从第1个0元素开始,向后找直到第1个非0元素,交换两者位置之后,接着移动到第2个0元素继续向后找非0元素两者交换,依次类推,直到所有数据找完为止。

但是如果按照上述步骤套用选择排序的代码去做的话,其时间复杂度为O(n^2),操作次数过多,我们可以稍微优化一下

创建指针 k 从角标 0 开始, k 的位置设定即为非0元素的位置,再从头寻找的非0元素,找到后与 k 位置交换即可 然后k++

动画效果如下:

代码如下:

class Solution {
    public void moveZeroes(int[] nums) {
        int k=0;
        for(int i=0;i<nums.length;i++){
            if(nums[i]!=0){
                int temp=nums[i];
                nums[i]=nums[k];
                nums[k]=temp;
                k++;
            }
        }
    }
}
发布了88 篇原创文章 · 获赞 142 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/u010189239/article/details/104403549