• 03_02_leetcode_283_移动零


    1、题目描述

    给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

    示例:

    输入: [0,1,0,3,12]
    输出: [1,3,12,0,0]
    说明:

    必须在原数组上操作,不能拷贝额外的数组。
    尽量减少操作次数。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/move-zeroes
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    2.思路

    走的歪路:原本打算首尾各设置一个指针,从头到尾遍历数组,遇到零就用尾部非零数据填充,忽略不改变原数组的相对位置################################以后要详细把每个条件写下来

    #####

    设置双指针,这两个指针都在开头,第一指针遍历数组,若为0,则另一个指针寻找非0数据填补上;若非0,则都前进一个数据

    其实就是有一条路,路上有许多坑,小1和小2都从头开始走,小1遇到坑就停下来,直到等到小2搬救兵把他给救出来。因为小2 把救兵搬走了,这个地方就没有救兵了,所以要置空。小2总是要比小1快,所以当小2走到头时,说明所有救兵就没有了。

    双指针的作用稍微有点动态,不过满足一个找出不满足的点,一个去不停的的填补不满足的点

    3.代码展示

    public void moveZeroes(int[] nums) {
            // initial number of numbers
            int i = 0, j = 0;
            while (j < nums.length) {
                if (nums[i] == 0) {
                    if (nums[j] != 0) {
                        nums[i] = nums[j];
                        nums[j] = 0;
                        i++;
                    }
                } else {
                    i++;
                }
                j++;
            }
        }

    4.金牌思路

    以寻找救兵为目的,直接覆盖,出发点不同,写出的代码不同

    public void moveZeroes(int[] nums) {
            // initial number of numbers
            int i = 0, j = 0;
            while (j < nums.length) {
                if (nums[j] != 0) {
                    nums[i] = nums[j];
                    nums[j] = 0;
                    i++;
                }
                j++;
    
            }
        }
  • 相关阅读:
    ajax相关知识总结
    http协议
    sass基础常用指南
    自定义上传图片样式并实现上传立即展示该图片
    HTML5 History 模式
    网页打印样式CSS
    session和cookie相关知识总结
    第二个冲刺周期
    软件工程学习进度表(第十三周)
    软件工程学习进度表(第十二周)
  • 原文地址:https://www.cnblogs.com/xiaoming521/p/14586844.html
Copyright © 2020-2023  润新知