第九天-补打卡

183 阅读1分钟

这个题目和前面那个有点像,所以我还是用前面那种方式解决问题,遍历,将不等于给定值的交换,代码如下:

class Solution(object):
    def removeElement(self, nums, val):
         if len(nums) == 0 :
             return 0
         is_tihan = 0
         for i in range(len(nums)):
             if nums[i] != val:
                 nums[i], nums[is_tihan] = nums[is_tihan], nums[i]
                 is_tihan = is_tihan + 1
        return is_tihan

在他的网站上找了一下,看有没有更简单的方式,还真找到了,这边有两种不同的解决方式,第一种代码比较多一点:

class Solution(object):
    def removeElement(self, nums, val):
        nums.sort()
        n = len(nums)
        
        if n == 0:
            return 0
        l, r = 0, n - 1
        mid, count = 0, 0
        while l < r:
            mid = (l + r) // 2
            if val > nums[mid]:
                l = mid + 1
            else:
                r = mid
        if nums[mid] != val:
            mid = r
        if nums[mid] != val:
            return n
        for i in range(mid, n):
            if nums[i] == val:
                count += 1
                continue
            break
        for j in range(mid, n - count):
            nums[j] = nums[j + count]
        return n - count

还有一种方式,巧妙的使用了list的特性:

class Solution(object):
    def removeElement(self, nums, val):
        while val in nums:
            nums.remove(val)
        return len(nums)

是不是感觉很简单,Python的魅力就在这里。