題目描述:
給你一個(gè)數(shù)組 nums 和一個(gè)值 val峡懈,你需要 原地 移除所有數(shù)值等于 val 的元素查辩,并返回移除后數(shù)組的新長(zhǎng)度媳禁。
不要使用額外的數(shù)組空間眠副,你必須僅使用 O(1) 額外空間并 原地 修改輸入數(shù)組。
元素的順序可以改變竣稽。你不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素囱怕。
示例 1:
輸入:nums = [3,2,2,3], val = 3
輸出:2, nums = [2,2]
解釋:函數(shù)應(yīng)該返回新的長(zhǎng)度 2, 并且 nums 中的前兩個(gè)元素均為 2。你不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素毫别。例如娃弓,函數(shù)返回的新長(zhǎng)度為 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0]岛宦,也會(huì)被視作正確答案台丛。
示例 2:
輸入:nums = [0,1,2,2,3,0,4,2], val = 2
輸出:5, nums = [0,1,4,0,3]
解釋:函數(shù)應(yīng)該返回新的長(zhǎng)度 5, 并且 nums 中的前五個(gè)元素為 0, 1, 3, 0, 4。注意這五個(gè)元素可為任意順序砾肺。你不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素挽霉。
來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/remove-element
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán)变汪,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處侠坎。
Python 解決辦法(一)
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
times = 0
for i in range(0, len(nums)):
if nums[i] == val:
times = times + 1
for i in range(0, times):
nums.remove(val)
性能 :40 ms 14.7 MB Python3
Python 解決辦法(二)
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
while val in nums:
nums.remove(val)
return len(nums)
性能: 52 ms 14.9 MB Python3
Python 解決辦法(三)
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
j=len(nums)
for i in range(j-1,-1,-1):
if nums[i]==val:
nums.pop(i)
return len(nums)
性能 32 ms 14.9 MB Python3
雙指針解法
class Solution:
def removeElement(self,nums,val):
p = 0
q = 0
while (q<len(nums)):
if nums[q] == val:
q += 1
else:
nums[p] = nums[q]
p += 1
q += 1
print(nums[0:p])
return len(nums[0:p])