日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

LeetCode简单题之移动零

發(fā)布時間:2023/11/28 生活经验 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode简单题之移动零 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目

給定一個數(shù)組 nums,編寫一個函數(shù)將所有 0 移動到數(shù)組的末尾,同時保持非零元素的相對順序。
示例:
輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]
說明:
必須在原數(shù)組上操作,不能拷貝額外的數(shù)組。
盡量減少操作次數(shù)。
來源:力扣(LeetCode)

解題思路

??此題可以用“冒泡”來解決遍歷當前數(shù)組當遇到不是0的數(shù)字就將它往前“冒”,直到碰到非零數(shù)字或者左括號。

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個數(shù)字(非零)前的零移動至它的后頭temp=nums[i]nums[i]=nums[i-1]nums[i-1]=tempi-=1for i in range(len(nums)):  #逐一檢查非零數(shù)字并進行移動if nums[i]!=0 and i!=0:move(i)


??這樣的冒泡顯然是十分耗費時間的,如果數(shù)組的前端有大量的零,那么這些非零的數(shù)字恐怕是要經(jīng)過長時間的“遷徙”才能到達相應的位置,這中間無疑有許多的無效移動。題目有個隱藏的屬性,那就是非零數(shù)字有相對順序,但是為零的數(shù)字順序就變得不那么重要了,我們只需要知道非零數(shù)字它最終應該在數(shù)組中的位置即可。基于此,我們可以設置一個計數(shù)器用來記錄非零數(shù)字的位置信息,當遇到一個非零數(shù)字時計數(shù)器加一,此時的計數(shù)器所示的便是當前非零數(shù)字的最終位置。

class Solution:def moveZeroes(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""count=-1num=0for i in nums:  #將對應的非零數(shù)字放入最終的位置if i!=0:count+=1nums[count]=i  else:num+=1  #統(tǒng)計零的個數(shù)if num!=0:  #在數(shù)組尾部更新為零nums[-num:]=num*[0]

總結

以上是生活随笔為你收集整理的LeetCode简单题之移动零的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。