27 移除元素

题目:

27 移除元素

 

 

方法1,可以理解为,双指针操作:

27 移除元素

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)

27 移除元素

 

 

代码:



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