文巾解题 283. 移动零
生活随笔
收集整理的這篇文章主要介紹了
文巾解题 283. 移动零
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 題目描述
2 解題思路
方法1 雙指針:交換數組
????????我們設立一個左指針left,表示[0,left)是已經處理好的,全是非0數的保序數列;同時我們設立一個右指針right,表示[right,len(nums))是我們沒有遍歷的原數組部分。
? ? ? ? 我們需要注意一點,只要我們之前遍歷的時候發現了0。那么[left,right)這一部分就全是0。
? ? ? ? 每次將right向后移動一格。
????????????????如果right所在位置的元素非0,那么就將right位置的元素和left位置的元素互換(即用一個非零數代替一個零),然后left也想后走一格
? ? ? ? ? ? ? ? 如果right所在位置的元素為0,那么left不動,只是right走一格
? ? ? ? 當right遍歷完的時候,所有的非零數都被換到0的前面去了,同時保序。
class Solution(object):def moveZeroes(self, nums):right=0left=0l=len(nums)while(right<l):if(nums[right]!=0):nums[left],nums[right]=nums[right],nums[left]right+=1left+=1elif(nums[right]==0):right+=1方法2 雙指針2.0:快慢指針
?設計一個快慢指針,快指針每次向后走一格。
如果快指針位置的元素為0,那么滿指針不動;
如果快指針位置的元素不為0,那么將快指針當前位置的元素賦值給慢指針。
這樣快指針遍歷完之后,所有的非零指針都在前面了,而且保序。
此時把慢指針后面的部分設置為0即可
class Solution(object):def moveZeroes(self, nums):fast=0slow=0l=len(nums)while(fast<l):if(nums[fast]!=0):nums[slow]=nums[fast]slow+=1fast+=1elif(nums[fast]==0):fast+=1for i in range(slow,l):nums[i]=0return(nums)?
總結
以上是生活随笔為你收集整理的文巾解题 283. 移动零的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文巾解题 189. 旋转数组
- 下一篇: 文巾解题 167. 两数之和 II -