代码随想录(leedcode) Day1 704 and 27

leedcode 704

二分查找 - 二分法是非常重要的基础算法,考察对区间的理解。

关键思想:真正的关键点在于理解 [] 或者 [) 的核心是指示区间的两个指针

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        '''
        关键:
        1. 确定不变区间
        2. 确定 while 的出口
        [-1,0,3,5,9,12]
        0,1,2,3,4,5
        '''
        # 确定二分查找的左右端点, 不变区间[)
        lift = 0 
        right = len(nums)
        while lift < right:
            # 把 nums 分成两份
            mindle = (lift + right-1) // 2
            # while 出口就是 if 判断
            # 如果target 小于 mindle,那么确定 target 在左边,更新 right 端点
            if target < nums[mindle]:
                right = mindle
            # 如果target 大于 mindle,那么确定 target 在右边,更新  lift 端点
            elif target > nums[mindle]:
                lift = mindle + 1
            # 如果target = mindle,返回middle 索引
            else:
                return mindle

        return -1

leedcode 27

思想:重要的是快针遍历数组,找出哪些不需要删除的元素。慢针按顺序将这些不需要删除的元素放置好

# 快慢针
class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        '''
        数据结构三要素
        逻辑:快慢针,快针找出不同的元素,
        物理:数组是连续的;要求空间复杂度 O(1);快针找到的地址给慢针
        算法:快慢针交换
        '''
        # 快慢针
        s = 0
        f = 0
        while f < len(nums):
            # 出口,不管怎么样,f 都会+1,保证 While 终止
            if nums[f] != val:
                nums[s] = nums[f]
                s += 1
            f += 1
        return s

	

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值