LeetCode简单题之移动零
生活随笔
收集整理的這篇文章主要介紹了
LeetCode简单题之移动零
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。
示例:
輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]
說明:
必須在原數組上操作,不能拷貝額外的數組。
盡量減少操作次數。
來源:力扣(LeetCode)
解題思路
??此題可以用“冒泡”來解決遍歷當前數組當遇到不是0的數字就將它往前“冒”,直到碰到非零數字或者左括號。
class Solution:def moveZeroes(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""def move(i):while nums[i-1]==0 and i>0: #將第i個數字(非零)前的零移動至它的后頭temp=nums[i]nums[i]=nums[i-1]nums[i-1]=tempi-=1for i in range(len(nums)): #逐一檢查非零數字并進行移動if nums[i]!=0 and i!=0:move(i)
??這樣的冒泡顯然是十分耗費時間的,如果數組的前端有大量的零,那么這些非零的數字恐怕是要經過長時間的“遷徙”才能到達相應的位置,這中間無疑有許多的無效移動。題目有個隱藏的屬性,那就是非零數字有相對順序,但是為零的數字順序就變得不那么重要了,我們只需要知道非零數字它最終應該在數組中的位置即可。基于此,我們可以設置一個計數器用來記錄非零數字的位置信息,當遇到一個非零數字時計數器加一,此時的計數器所示的便是當前非零數字的最終位置。
class Solution:def moveZeroes(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""count=-1num=0for i in nums: #將對應的非零數字放入最終的位置if i!=0:count+=1nums[count]=i else:num+=1 #統計零的個數if num!=0: #在數組尾部更新為零nums[-num:]=num*[0]
總結
以上是生活随笔為你收集整理的LeetCode简单题之移动零的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode简单题之丢失的数字
- 下一篇: LeetCode简单题之赎金信