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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文巾解题 27. 移除元素

發(fā)布時(shí)間:2025/4/5 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文巾解题 27. 移除元素 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 題目描述

2 解題思路

一般來說,原地修改指針的題目,都是快慢指針來實(shí)現(xiàn)的。

2.1 傳統(tǒng)快慢指針

時(shí)間復(fù)雜度:O(n),其中 n?為序列的長度。我們需要遍歷該序列至多兩次。

空間復(fù)雜度:O(1)。我們只需要常數(shù)的空間保存若干變量。

class Solution:def removeElement(self, nums: List[int], val: int) -> int:slow=0fast=0l=len(nums)while(fast<l):if(nums[fast]==val):fast+=1else:nums[slow]=nums[fast]slow+=1fast+=1return(len(nums[:slow]))

2.2 改良快慢指針(僅限本題)

如果要移除的元素恰好在數(shù)組的開頭,例如序列 [1,2,3,4,5],當(dāng)val 為 1 時(shí),我們需要把每一個(gè)元素都左移一位。注意到題目中說:「元素的順序可以改變」。實(shí)際上我們可以直接將最后一個(gè)元素 5?移動到序列開頭,取代元素 1,得到序列[5,2,3,4],同樣滿足題目要求。這個(gè)優(yōu)化在序列中 val 元素的數(shù)量較少時(shí)非常有效。

實(shí)現(xiàn)方面,我們依然使用雙指針,兩個(gè)指針初始時(shí)分別位于數(shù)組的首尾,向中間移動遍歷該序列。

這樣的方法兩個(gè)指針在最壞的情況下合起來只遍歷了數(shù)組一次。比2.1的最壞情況少遍歷了一遍數(shù)組

class Solution:def removeElement(self, nums: List[int], val: int) -> int:l=len(nums)front=0back=l-1while(front<=back):print(front,back,nums)if(nums[front]==val):nums[front]=nums[back]back-=1else:front+=1return(len(nums[:front]))

?

總結(jié)

以上是生活随笔為你收集整理的文巾解题 27. 移除元素的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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