[LeetCode]283. Move Zeroes
阿新 • • 發佈:2020-11-19
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:
- You must do thisin-placewithout making a copy of the array.
- 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)returnnums; 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; };