移動零
easy
給定一個數組
nums
,編寫一個函數將所有0
移動到數組的末尾,同時保持非零元素的相對順序。請注意 ,必須在不復制數組的情況下原地對數組進行操作。
示例 1:
輸入: nums = [0,1,0,3,12] 輸出: [1,3,12,0,0]
示例 2:
輸入: nums = [0] 輸出: [0]
提示:
1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1
**進階:**你能盡量減少完成的操作次數嗎?
法1:操作次數多,效率非常低
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
for i, num in enumerate(nums):
if num == 0:
nums.remove(0)
nums.append(0)
return nums
法2:雙指針(效率高)
演示:文章來源:http://www.zghlxwxcb.cn/news/detail-528549.html
- 步驟一:
- 步驟二
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
i = j = 0#設置雙指針
#步驟一
#i遍歷數組,j指向為0的下標,當nums[i]不為0時,將nums[i]的值替換到nums[j],然后j向后移動一位
while i < len(nums):
if nums[i] != 0:
nums[j] = nums[i]
j += 1
i += 1
#步驟二
#步驟一已經將所有非0數移到前面去了,現在j在最后一個非0數之后,將j到結尾的數全部賦值為0
while j < len(nums):
nums[j] = 0
j += 1
return nums
我們創(chuàng)建兩個指針 i 和 j,第一次遍歷的時候指針 j 用來記錄當前有多少 非0 元素。即遍歷的時候每遇到一個 非0 元素就將其往數組左邊挪,第一次遍歷完后,j 指針的下標就指向了最后一個 非0 元素下標。
第二次遍歷的時候,起始位置就從 j 開始到結束,將剩下的這段區(qū)域內的元素全部置為 0。文章來源地址http://www.zghlxwxcb.cn/news/detail-528549.html
到了這里,關于leetcode:移動零的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!