今天学习了二分查找相关的算法,总结了二分的优点:1-->比较次数少 2-->查找速度快 3-->平均性能好。但是缺点也显而易见,就是需要一个有序的环境。
时间复杂度:最优情况O(1),平均/最坏时间复杂度O(log n)
二分的思路大致将整体分为两块,在中间设值和查询目标值进行比较,如果一样直接返回下标,如果不一样,判断目标值在左区域还是右区域,缩半进行再次查询。不存在即返回-1。
核心代码如下:
例题:
菜鸟思想 ( 错误思想 ):
看到这道题我第一反应思路是先把所有的巧克力边长进行比较求最短,用最短的边长往下进行遍历看看是否有最优解。此方法后来在某一大佬发现解析中发现不对,因为可能用不到最小边长的那个巧克力。
菜鸟感悟(本人总结):
起初我对二分的认识就是查找某一目标数字(明确数字),并没有想到可以把答案放在一片区域内进行查找,所以这道题也很久没绕过来
做题思路:
在看到大佬解析的时候,我懵懵懂懂地敲个码,首先就是很关键的一步,要算出一块巧克力能分成多少块。给定的正方形边长x
,长为l
,宽为w
矩形,最多能分成(l/x)*(w/x)
块。接着在题目给定的范围内进行二分查找分好之后合适的边长
代码如下:
如果有错误请大佬及时指点