leetcode 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移到數組的最後,同時要保持數組的非零元素順序不變數組

同時這道題也有額外的要求:不能聲明一個新的拷貝的數組以及儘可能減小操做的次數code

思路

  • 由於題目不容許咱們新聲明一個數組,並且非零元素都排在新數組的最前面。
  • 所以咱們有這樣一個想法:用一個值保存當前遍歷到的非零元素數量,並將第i個元素賦值給數組下標爲i-1的元素。這樣後面剩下的位置,都賦值爲0便可知足題目的要求。

解法

public void moveZeroes(int[] nums) {
        if(nums != null && nums.length == 0) return;
        int insertPost = 0;
        for(int num : nums){
            if(num != 0){
                nums[insertPost++] = num;
            }
        }
        while(insertPost < nums.length){
            nums[insertPost++] = 0;
        }
}
相關文章
相關標籤/搜索