代码随想录算法训练营第一天 | Leetcode704.二分查找、27.移除元素。

Leetcode704.二分查找

题目链接:力扣

因为之前看过卡哥对这题的讲解视频,所以再次看到这题时脑袋里第一反应就是循环不变量。

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        # 左闭右开式
        # l = 0
        # r = len(nums)
        # while l < r:
        #     mid = (l + r)//2 #注意整除是//
        #     if nums[mid] == target:
        #         return mid
        #     elif nums[mid] > target:
        #         r = mid
        #     else:
        #         l = mid + 1
        # return -1 

        # 左闭右闭式
        l = 0
        r  = len(nums) - 1
        while l <= r:
            mid = (l + r)//2
            if nums[mid] == target:
                return  mid
            elif nums[mid] > target:
                r = mid - 1
            else:
                l =  mid + 1
        return -1               

Leetcode27.移除元素

题目链接:力扣

看到官方给的示例2,第一反应就是相向双指针,解法相向双指针1里巧妙地规避了再用循环,但是可能也造成了一些无效的赋值操作,相向双指针2逻辑更好理解一些,但是要注意一些边界条件,快慢指针较为简单。

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        # 相向双指针1
        # l = 0
        # r = len(nums) - 1
        # while l <= r:
        #     if nums[l] == val:
        #         nums[l] = nums[r]
        #         r -= 1
        #     else:
        #         l += 1
        # return l
        # 相向双指针2
        # l = 0
        # r = len(nums) - 1
        # while l <= r:
        #     while l<=r and nums[l] != val:
        #         l += 1
        #     while l<=r and nums[r] == val:
        #         r -= 1
        #     if l < r:
        #         nums[l] = nums[r]
        #         l+=1;r-=1
        # return l

        # 快慢指针
        slow = 0 
        for fast in range(0, len(nums)):
            if nums[fast]!= val:
                nums[slow] = nums[fast]
                slow +=1
        return slow


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值