特殊二分总结:shopee二面算法题(又是该死的二分

本文通过分享在shopee二面中的算法题,详细解析了如何利用特殊二分法解决寻找最大距离的问题。在初始问题中,需要为三个人安排位置以最大化他们之间的距离。通过贪心策略和二分查找,找到了有效的解决方案。在后续的Follow-up问题中,扩展到k个人的情况,同样使用二分法求解。作者反思了在面对类似二分问题时的思维障碍,并提出了如何明确求解范围、直接对目标进行二分的解题策略。同时,强调了这类问题的共同特征,如寻求最大或最小值,以及存在可二分的条件。
摘要由CSDN通过智能技术生成

最近面了shopee新加坡office,在二面中遇到了一道有意思的题目。
题目分为两部分,开始比较简单,followup会有难度(但是也是之前遇到过总结过的二分,但是该死的又是没有自己想出来

题目:
给出一个升序数组,其中每个数字代表的是每个空位置的坐标。现在要给三个人安排位置,要求使他们之间距离最大(以相邻两个人距离中较小的距离为距离)
解法:
首先肯定要把一个安排在最左边,一个在最右边(贪心,这时面试官问了我为什么要这样,怎么证明这样是对的?)
然后只需要找出中间的人的位置就行了。
最简单可以遍历一遍就可以了,但是我们可以用二分:如果左边范围比右边大,接下来可以在左边找;或者如果左边范围比右边小,之后在右边找。
但是需要注意的是:即使对于一个mid值它的两边不相等,但是这个mid位置仍然可能是最后的位置,所以二分的时候要注意不能简单的和以前一样:lo = mid + 1 or hi = mid - 1,而应该是:lo = mid or hi = mid,最后的范围会找出两个位置,再在这两个位置中找。(一开始写错了,幸好自己检查出来了,改过来了)

int minDist(vector<int>& seats) {
   
  int sz = seats.size();
  if (sz < 3)
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值