代码随想录第一天博客

目录

1 今日学习的文章

数组理论基础

学习收获

二分查找

文章链接

看到题目的第一想法

看到代码随想录之后的想法

自己实现过程中遇到的困难

移除元素

文章链接

看到题目的第一想法

看到代码随想录之后的想法

自己实现过程中遇到的困难


1 今日学习的文章

数组理论基础

学习收获

理解了Java二维数组的排列方式

二分查找

根据是否满足题目的条件来缩小答案所在的区间,这个就是二分的本质。另外需要注意,二分的使用前提:有序数组

文章链接
看到题目的第一想法

二分法比较熟悉之前在王道数据结构中多次接触过,感觉应该很简单

看到代码随想录之后的想法

发现二分法会有区间限制,左闭右开,左闭右闭,两种实现方式中存在玄机

自己实现过程中遇到的困难

在自己实现过程中,会发现没有想象中的那么简单

1 . 在王道数据结构中mid的取值为  mid = (low+high)/2,而在代码随想录中,mid取值为mid=low+(high-low)/2,群里给出了原因:第一种方式溢出的可能性比较大,比如Java的int的最大值为2^31-1,如果low和high都超过了最大值的一半,那么它们相加就溢出了

2. 二分查找的关键在于定边界,实际模拟一下  二分的关键就在边界
可以参考每日精华的一些总结:https://www.yuque.com/chengxuyuancarl/wnx1np/ktwax2#35ee2f7d

  • 什么是区间不变量? 比如 区间取左闭右闭的话 那么每次区间二分 范围都是新区间的左闭右闭  后面做判断时  要一直基于这个左闭右闭的区间
  • 其实区间定义成开或者闭都没有什么关系  只是要明确每次收缩范围后 范围内的元素是哪些  注意会不会漏掉边界就好

移除元素

掌握双指针

文章链接

题目建议:  暴力的解法,可以锻炼一下我们的代码实现能力,建议先把暴力写法写一遍。 双指针法 是本题的精髓,今日需要掌握,至于拓展题目可以先不看。 

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

文章讲解:代码随想录

视频讲解:数组中移除元素并不容易! | LeetCode:27. 移除元素_哔哩哔哩_bilibili

看到题目的第一想法

可以用暴力做,但是想着是用插入排序差不多的思想,不过还是失败了

可以用双指针,用的双相的还是有问题

看到代码随想录之后的想法

代码随想录的双指针简洁有效,大致思路时快指针和慢指针

快指针用来找能替换的元素

慢指针用来定位需要替换的位置

  • 快指针可以理解成在旧数组中找非目标元素,然后赋值给慢指针指向的新数组,虽然都指向一个数组
自己实现过程中遇到的困难

1 最终返回时返回的时lowIndex+1 其实应该时lowIndex(想一下如果数组中所有值都为val,则返回0)

2 双向双指针还是会有各种各样的问题,目前还没找出来

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值