力扣刷题Day 1 | 704. 二分查找,27. 移除元素

704. 二分查找

笔记

  1. 我代码的区间是左闭右开的,因此注意更新右端点的时候可以取mid,更新左端点的时候是mid+1
  2. while循环的判断条件:只要符合条件的进循环,不符合的情况就出去,边界的时候带入相关值考虑一下

Python代码

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        left = 0
        right = len(nums)  # 左闭右开的区间
        while(left < right): # 右边是开区间,不能取等都是合法的
            mid = (left + right) // 2
            if nums[mid] > target:
                right = mid
            elif nums[mid] < target:
                left = mid + 1
            else:
                return mid
        return -1


27. 移除元素

笔记

  1. 关键思想是快指针fast指向满足条件的数组元素,也就是快指针遇到不等于目标值的时候才对数组做操作,如果指向的值等于要删除的目标值,那么指针往后移,不做操作
  2. 慢指针slow是满足条件数组的下标
  3. 返回的数组长度也就是慢指针slow的值,因为满足条件的数组的长度还是原数组的长度,因此不能返回len(nums)

Python代码

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
     
        fast = 0 # 指向满足条件的数组元素
        slow = 0 # 满足条件的数组的下标

        for fast in range(len(nums)):
            if(nums[fast] != val):
                nums[slow] = nums[fast]
                slow += 1
        return slow

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值