目录
总结
前言
秋招倒计时一年,好久没看算法了,希望可以用算法训练营开一个好头!
704. 二分查找
文档讲解:数组理论基础 二分查找(代码随想录)
视频讲解:手把手带你撕出正确的二分法
思路:
主要分为两种写法,左闭右闭和左闭右开。
左闭右闭时,while循环判定left<=right,因为此时left==right存在;当mid不等于target时,往左区间找right = mid - 1,往右区间找left = mid + 1,因为此时的mid肯定不是我们要找的值。
左闭右开时,while循环判定left<right,因为等号不存在;if(nums[mid] > target)时,right = mid,因为认为区间是右开,right = mid时mid已经不在查找区间里了。
遇到的问题:
一开始看题的时候边界处理想法非常模糊,第一遍写的时候还把mid的定义放在了while循环外面,导致mid一直没更新,直接超时。。。
还有一个之前没注意到的地方是取mid值的时候如果用mid = (left + right) / 2的话有几率发生溢出,所以用mid = left + (right - left) / 2更保险。
27. 移除元素
文档讲解:移除元素
视频讲解:数组中移除元素并不容易!
思路:
暴力解法就是第一个for循环查找元素,第二个for循环把该元素后面元素全部前移一位,重点在于移完后i--,重新比较新的nums[i]与val。
快慢指针就是用慢指针确保它之前的元素不含有目标元素,用快指针指向新数组。
遇到的问题:
真的好久没写算法了第一反应是调包!然后反应过来其实是暴力法。。。第二个for循环的时候一开始没想明白为啥要i--,后来相通了!快慢指针属于没有一点头绪,直接看答案。
总结
第一次写博客,虽然今天的题不是很难但是还是花了很长时间,希望通过坚持可以提升效率!无论是写题还是写博客!