Leetcode-Remove_Element

Leetcode 27. Remove Element 解題心得

題目: 27. Remove Element

題目描述

給定一組整數陣列 nums 與一個整數 val,請移除陣列中所有等於 val 的元素,並且回傳移除後的陣列長度。

但是,不可以使用額外的陣列空間,必須在原地操作陣列,可以不考慮順序。

大概像這樣:

1
2
3
Given nums = [3,2,2,3], val = 3,

Your function should return length = 2, with the first two elements of nums being 2.

解題思路

解法1: 直接遍歷陣列,如果遇到等於 val 的元素,就remove掉。

解法2: 用list生成式,把不等於 val 的元素重新生成一個新的陣列,再指派給 nums

解法3: 類似於解法2,但是是用 filter 來過濾掉等於 val 的元素。

Code

解法1:

1
2
3
4
5
6
7
8
9
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
i = 0
while i < len(nums):
if nums[i] == val:
nums.remove(nums[i])
else:
i += 1
return len(nums)

Runtime 39 ms Beats 75.59%
Memory 16.1 MB Beats 92.72%

解法2:

1
2
3
4
5

class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
nums[:] = [x for x in nums if x != val] # [:] 代表指派給 nums
return len(nums)

Runtime 44 ms Beats 41.66%
Memory 16.1 MB Beats 92.72%

解法3:

1
2
3
4
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
nums[:] = filter(lambda x: x != val, nums) # [:] 代表指派給 nums
return len(nums)

Runtime 39 ms Beats 75.59%
Memory 16.3 MB Beats 31.73%


Leetcode-Remove_Element
https://hibana2077.github.io/post/Leetcode-Remove-Element.html
Author
hibana2077
Posted on
September 15, 2023
Licensed under