LeetCode # 283 陣列裡的0全都移到最後,其他保持原順序
輸入: [0, 1, 0, 3, 12]
輸出: [1, 3, 12, 0, 0]
方法一(直接求非零元素的最終位置):
- 用一個變數zero_num記錄到目前為止遇到0的個數,當元素為0時就將其加一,然後跳過繼續遍歷下一個數;
- 如果當前的數字不是0,根據zero_num我們可以知道它的最終位置。比如輸入陣列中,1之前出現過一個0,把這個0去除,等同於1要往前移一位;又如12之前出現過兩個0,把這兩個0去除,等同於12最終要往前移兩位。所以每個非零數字當前下標減去zero_num就是它最終位置的下標,代表它應該往前跳zero_num步;
- 陣列全部遍歷完後,還剩最後一步:將統計的zero_num個0放到最後。
####### 原始版
l = len(nums)
zero_num = 0 # 記錄到目前為止遇到幾個0了
for i, num in enumerate(nums):
if num == 0:
zero_num += 1
continue
nums[i-zero_num] = num
# 最後補0
for j in range(l-zero_num, l):
nums[j] = 0
####### 簡化版
nums.sort(key=lambda x: x == 0) # True在False之前
方法二(雙指標分別記錄已排序和未排序的位置):
- 左指標指向已排好序的最後一個數字(最終位置已經確定了,並且其左側的都是非零數),右指標指向還沒排序的第一個數字;
- 如果右指標指的數字為0,則繼續往後遍歷;如果不為0,那就要讓左指標向後一位,並將此時的左右交換,然後右指標繼續往後;
- 這種方法利用了左指標和右指標定義對應的性質:
左指標左邊的數都是已經排好的非零數,每次右指標找到新的非零數時,左指標會往後一位,如果此時左和右之間有間隔,那間隔的這些數字一定都是0,比如left =0, right = 3時,陣列變成了[1, 0 ,0, 3, 12],我們發現右指標所指的3不為0,就會讓左指標向後一位,指向1後面的0,然後讓0和3互換,這樣就會把0不斷往後換,但是顯然這中間有許多冗餘操作,每次都要移動不同的0.
l = len(nums)
left, right = -1, 0
while right<l:
if nums[right]!=0:
left += 1
temp = nums[left]
nums[left] = nums[right]
nums[right] = temp
right += 1
相關文章
- 進行List集合去重操作,分為保持原List集合元素順序和不保持原順序
- LeetCode - 1389 - 按既定順序建立目標陣列LeetCode陣列
- JavaScript 陣列順序打亂JavaScript陣列
- js將陣列中元素的順序打JS陣列
- leetcode陣列練習題2:283. 移動零LeetCode陣列
- 【劍指offer】調整陣列順序陣列
- 列定義的順序和列儲存的順序
- 順序跳躍顯示陣列中的值陣列
- 調整陣列元素順序演算法陣列演算法
- Leetcode 陣列中和為給定值的最長子陣列LeetCode陣列
- js打亂陣列順序程式碼例項JS陣列
- 如何保持json序列化的順序性?JSON
- 按照陣列順序給物件重新組合成新物件陣列物件
- laravel 按照whereIn中給定陣列順序輸出Laravel陣列
- leetcode最短無序連續子陣列LeetCode陣列
- LeetCode3264[K次乘運算後的最終陣列I]LeetCode陣列
- js將陣列元素順序倒轉程式碼例項JS陣列
- 陣列與連結串列等順序表逆置薦陣列
- Hashtable中put進去的物件是否保持put的順序物件
- LeetCode 283 jsLeetCodeJS
- 佇列-順序儲存佇列
- 順序佇列基本操作佇列
- 結構體最後的零長度陣列結構體陣列
- 陣列--移除陣列中指定的元素,不改變原陣列和改變原陣列陣列
- javascript顛倒陣列元素順序簡單程式碼例項JavaScript陣列
- 給定一個按非遞減順序排序的整數陣列 A,返回每個數字的平方組成的新陣列,要求也按非遞減順序排序。排序陣列
- LeetCode—283—Move ZeroesLeetCode
- PHP獲取陣列最後一個值PHP陣列
- JavaScript刪除陣列最後一個元素JavaScript陣列
- JavaScript獲取陣列最後一個元素JavaScript陣列
- JavaScript 刪除陣列最後一個元素JavaScript陣列
- JS 陣列亂序JS陣列
- 佇列順序性引發的思考佇列
- 佇列的順序儲存結構佇列
- LeetCode題解(Offer21):調整陣列順序使奇數位於偶數前面(Python)LeetCode陣列Python
- 理順 JavaScript (11) - 陣列JavaScript陣列
- 佇列的順序儲存--迴圈佇列的建立佇列
- 面試題21:調整陣列順序奇數位於偶數前面面試題陣列