zoukankan      html  css  js  c++  java
  • 283. Move Zeroes

    Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements.

    For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0].

    给定一个数字数组,写一个方法将所有的“0”移动到数组尾部,同时保持其余非零元素的相对位置不变。
    例如,给定nums = [0, 1, 0, 3, 12],在调用你的函数之后,nums应该变为[1, 3, 12, 0, 0]。
    备注:
    你必须就地完成,不得复制该数组。
    最小化总共的操作数。
     
    方法一:
     1  public void moveZeroes(int[] nums) {
     2         int zeroIndex = 0;
     3         int nonZeroIndex = 0;
     4         int size = nums.length;
     5 
     6         while(zeroIndex<size && nonZeroIndex<size){
     7             while(zeroIndex<size && nums[zeroIndex]!=0) zeroIndex++;
     8             while(nonZeroIndex < size && (nums[nonZeroIndex]==0 || nonZeroIndex<zeroIndex)) nonZeroIndex++;
     9 
    10             //swap the value
    11             if(zeroIndex<size && nonZeroIndex<size){
    12                 nums[zeroIndex++] = nums[nonZeroIndex];
    13                 nums[nonZeroIndex++] = 0;
    14             }
    15         }
    16     }

    方法二

     1     private int findValue(int[] nums, int start, boolean isZero) {
     2         if (start >= nums.length || start < 0) return -2;
     3         for (int i = start; i < nums.length; i++) {
     4             if (isZero) {
     5                 if (nums[i] == 0)
     6                     return i;
     7             } else {
     8                 if (nums[i] != 0)
     9                     return i;
    10             }
    11         }
    12         return -2;
    13     }
    14     
    15     public void moveZeroes(int[] nums) {
    16         int length = nums.length;
    17         int zero = -2;
    18         int number = -2;
    19         if (length == 0) return;
    20         zero = findValue(nums,0,true);
    21         if (zero == -2) {
    22             return;
    23         }
    24         number = findValue(nums,zero,false);
    25         if (number == -2) {
    26             return;
    27         }
    28 
    29         while (zero < number) {
    30             nums[zero] = nums[number];
    31             nums[number] = 0;
    32             zero = findValue(nums,zero+1,true);
    33             if (zero == -2) {
    34                 break;
    35             }
    36             number = findValue(nums,zero+1,false);
    37             if (number == -2) {
    38                 break;
    39             }
    40         }   
    41     }
  • 相关阅读:
    software architect
    bmh算法
    程序动态切片技术研究
    chm便捷制作
    protobuffer源码解读
    字符串搜索算法比较
    软件架构重组:实践需要和当前做法
    游戏素材制作
    ea(enterprise architect) 相关资料集锦
    vs开启工程非常卡分析和解决
  • 原文地址:https://www.cnblogs.com/wzj4858/p/7669848.html
Copyright © 2011-2022 走看看