1. 程式人生 > 實用技巧 >[LeetCode]283. Move Zeroes

[LeetCode]283. Move Zeroes

283.Move Zeroes Easy

Given an arraynums, write a function to move all0's to the end of it while maintaining the relative order of the non-zero elements.

Example:

Input: [0,1,0,3,12]
Output: [1,3,12,0,0]

Note:

  1. You must do thisin-placewithout making a copy of the array.
  2. Minimize the total number of operations.

題目大意:給定一個數組,在不改變陣列中數字排序的情況下,將陣列中所有的0都移動到陣列的尾部

注意:1.不能使用新的陣列 2.儘可能少的對陣列進行修改

思路:

方法一:

遍歷陣列,記錄陣列中0的個數,並將陣列中的0刪除掉,最後在陣列尾部插入相應數量的0.這麼做的缺點是,對於有的語言,沒有對陣列操作的函式的話,很難實現,並且時間複雜度較高。

程式碼如下:

/*JavaScript*/
var moveZeroes = function(nums) {
    let zero_num=0;
    for(let i=0;i<nums.length;++i){
        if(nums[i]===0){
            zero_num++;
            nums.splice(i,
1); i--; } } while(zero_num--){ nums.push(0); } return nums; };

方法二:

維護一個遊標zero_start,指示陣列中0開始的地方,遍歷陣列,遇到非0陣列就將那個數字放到zero_start指示的地方,然後將zero_start向前移動1.

增加邊界判斷,陣列大小為小於等於1,就直接返回陣列本身。

程式碼如下:

/*JavaScript*/
var moveZeroes = function(nums) {
    if(nums.length<=1)return
nums; let zero_start=-1; for(let i=0;i<nums.length;++i){ if(nums[i]==0 && zero_start==-1){ zero_start=i; } else if(nums[i]!=0 && zero_start!=-1){ nums[zero_start]=nums[i]; nums[i]=0; zero_start++; } } return nums; };