• LeetCode283. 移动零


    一、题目描述

    二、解法

    class Solution {
        public void moveZeroes(int[] nums) {
            if (nums == null || nums.length == 0) return;
            /**
             *  方法1: 双指针,两次遍历  ->  把非0的往前挪,然后补0
             */
            int index = 0;
            for (int i = 0; i < nums.length; i++) {
                if (nums[i] != 0) {
                    nums[index++] = nums[i];
                }
            }
            // nums中,[0...index)的位置均为非0元素, nums剩余位置补0
            while (index < nums.length) {
                nums[index++] = 0;
            }
            /**
             *  方法2:双指针,一次遍历,交换
             *        优化1:只当 i 和 index 不相等时才进行交换。应对全非0元素的特殊情况。
             *        优化2:当i > index时,用赋值操作 代替 交换操作
             */
            /*
            int index = 0;
            for (int i = 0; i < nums.length; i++) {
                if (nums[i] != 0) {
    //                swap(nums, i, index);
    //                index++;
                    // 优化1
                    if (i != index) {
    //                    swap(nums, i, index);
                        // 优化2
                        nums[index] = nums[i];
                        nums[i] = 0;
    
                    }
                    index++;
                }
            }
            */
            /**
             * 方法3:双指针,一次遍历
             *      思路:把 i - j 看作另一个指针,它是指向第一个0的位置
             */
            /*
            int j = 0; // 统计0的个数
            for (int i = 0; i < nums.length; i++) {
                if (nums[i] == 0) {
                    j++;
                }else if (j != 0) {
                    nums[i - j] = nums[i];
                    nums[i] = 0;
                }
            }
            */
        }
        private void swap(int[] nums, int a, int b) {
            int temp = nums[a];
            nums[a] = nums[b];
            nums[b] = temp;
        }
    }

     

  • 相关阅读:
    创建窗体不抢夺焦点的方法
    控件绘制的四种方法
    ATL CAxWindow类创建问题一则
    PE文件版本那些事儿
    GDIPlus非典型误用一例
    stl 常用代码
    For each loop in Native C++
    win7 64 下 VS2008 调试、退出时错误的解决
    DailyWallpaper v1.03 released
    编程当道,学点Python技术好傍身
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14087953.html
Copyright © 2020-2023  润新知