二分查找(Java)儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形为了公平起见,小明需要从这 N 块巧克力中

 今天学习了二分查找相关的算法,总结了二分的优点:1-->比较次数少  2-->查找速度快   3-->平均性能好。但是缺点也显而易见,就是需要一个有序的环境。

        时间复杂度:最优情况O(1),平均/最坏时间复杂度O(log n)

        二分的思路大致将整体分为两块,在中间设值和查询目标值进行比较,如果一样直接返回下标,如果不一样,判断目标值在左区域还是右区域,缩半进行再次查询。不存在即返回-1。

        核心代码如下:

例题:        

菜鸟思想 ( 错误思想 ):

        看到这道题我第一反应思路是先把所有的巧克力边长进行比较求最短,用最短的边长往下进行遍历看看是否有最优解。此方法后来在某一大佬发现解析中发现不对,因为可能用不到最小边长的那个巧克力。

菜鸟感悟(本人总结):

        起初我对二分的认识就是查找某一目标数字(明确数字),并没有想到可以把答案放在一片区域内进行查找,所以这道题也很久没绕过来

做题思路:

        在看到大佬解析的时候,我懵懵懂懂地敲个码,首先就是很关键的一步,要算出一块巧克力能分成多少块。给定的正方形边长x,长为l,宽为w矩形,最多能分成(l/x)*(w/x)块。接着在题目给定的范围内进行二分查找分好之后合适的边长

代码如下:

如果有错误请大佬及时指点

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值