27 移除元素
题目:
方法1,可以理解为,双指针操作:
class Solution:
def removeElement(self, nums, val):
n = 0
s = len(nums)
for i in range(s):
if nums[i - n] == val:
del nums[i - n]
n += 1
print(nums)
return len(nums)
类似方法1:注意 remove, del 后数组长度发生了变化, i -=1 n -=1 注意, 本质上一样的意思
class Solution:
def removeElement(self, nums, val):
i, n = 0, len(nums)
while (i < n):
if nums[i] == val:
nums.remove(val)
i -= 1
n -= 1
i += 1
return n
方法二:pop,感觉pop时间挺久的,因为, --》 想起实现队列算法的时候, 使用pop(0) 复杂度太高O(n),应该使用循环数组O(1)复杂度
class Solution:
def removeElement(self, nums, val):
while val in nums:
nums.pop(nums.index(val))
return len(nums)
代码:
import time
class Solution1:
def removeElement(self, nums, val):
n = 0
s = len(nums)
for i in range(s):
if nums[i - n] == val:
del nums[i - n]
n += 1
print(nums)
return len(nums)
class Solution2:
def removeElement(self, nums, val):
n = 0
s = len(nums)
for i in range(s):
if nums[i - n] == val:
del nums[i - n]
n += 1
print("nums = ", nums)
return len(nums)
start1 = time.time()
a = Solution1()
# print(a.removeElement([3, 2, 2, 3], 3))
a.removeElement([0,1,2,2,3,0,4,2], 2)
end1 = time.time()
print("time1 = ", end1-start1)
time.sleep(1)
print('\n')
start2 = time.time()
b = Solution2()
b.removeElement([0,1,2,2,3,0,4,2], 2)
end2 = time.time()
print("time1 = ", end2-start2)
[0, 1, 3, 0, 4]
time1 = 5.984306335449219e-05
nums = [0, 1, 3, 0, 4]
time1 = 3.504753112792969e-05