代码随想录训练营第一天(数组 leetcode704, 27)

题目链接:

leetcode 704:  二分法查找

https://leetcode.com/problems/binary-search/

讲解链接:

https://www.programmercarl.com/0704.二分查找.html

看到题目的第一思路:

题目不难 但是没有很直接快速的思路

代码随想录之后的想法和总结:

加深了对二分法的理解 以及两种区间写法的运用 以后可以更加熟练的使用

遇到的困难:

无 自己手动梳理了一遍循环的过程

可以记录备用的固定代码方法模版:

二分法(左闭右闭区间):

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        left, right = 0, len(nums) - 1  # 定义target在左闭右闭的区间里,[left, right]

        while left <= right:
            middle = left + (right - left) // 2
            
            if nums[middle] > target:
                right = middle - 1  # target在左区间,所以[left, middle - 1]
            elif nums[middle] < target:
                left = middle + 1  # target在右区间,所以[middle + 1, right]
            else:
                return middle  # 数组中找到目标值,直接返回下标
        return -1  # 未找到目标值
V

题目链接:

leetoce 27: 原地移除元素,并返回移除后数组的新长度

https://leetcode.com/problems/remove-element/

讲解链接:

https://www.programmercarl.com/0027.移除元素.html

看到题目的第一思路:

思路偏向于删除而不是覆盖 对数组的基础理论知识不够完善

代码随想录之后的想法和总结:

加深对于双指针算法的理解:

这题解法的核心就是遍历数据过程中遇到等于目标值就直接跳过,不等于目标值就赋值,这样就能 过滤掉(也就是删除掉)目标值

快指针用来寻找,慢指针用来存储

一些在评论区看到的好的问题与回答:

问:为啥没有删除元素,只是覆盖?

答:因为数组定义,数组是一个连续空间,如果删除元素,就会缺了一个空间,所以在数组中进行删除操作其实是进行覆盖操作。

问:在return 数组的时候不是把所有元素都return回来,而是只留下了保留的元素?

答:视频中进行删除操作也就是覆盖操作的之后,返回的是slow指针,那么力扣上会把这个slow指针当作数组的长度,所以返回出来的就是进行删除操作或者说覆盖操作之后的数组。

问:为啥要return slow 不是slow➕1 删除后长度不是6吗

答:因为每次更新完nums【slow】之后,slow都会加1,指向下一个位置,所以结束的时候slow的值已经就是新数组的长度了,nums中0到 slow-1 的位置才是移除过val的新数组。

遇到的困难:

暂无

可以记录备用的固定代码方法模版:

暂无

今日收获,学习时长:

第一天学习进度稍慢 有其他事情打断 之后更加勤劳赶进度

学习时长大概3h之内(有不够专心和集中的时刻 希望之后加强效率 缩短时间 养成习惯)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值