zoukankan      html  css  js  c++  java
  • 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;
        }
    }

     

  • 相关阅读:
    【Xamarin破解补丁找不到?】
    【Xamarin挖墙脚系列:Xamarin.Android的API设计准则】
    【给你几个使用Xamarin的理由】
    【Xamarin 跨平台机制原理剖析】
    HttpStatusCode 枚举
    C语音--static变量
    extern "c"用法
    C语言---类型转换
    VS2008资源问题解决方法
    003---hibernate主要接口介绍
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14087953.html
Copyright © 2011-2022 走看看