1552. 两球之间的磁力(中等)- LeetCode

博客介绍了LeetCode的一道中等难度问题,涉及求解最大最小磁力的问题。解题策略是利用二分查找法,在有序数组中寻找能放置所有小球且两球间磁力最大的情况。通过建立check函数判断当前数组是否满足条件,不断更新边界直至找到答案。代码实现的时间复杂度为O(nlogn),空间复杂度为O(1)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

在这里插入图片描述

解法

自己没想出来,参考了大佬的思路解法,下面试着用自己的话讲一遍。这道题是属于求“最大最小”的题型,一般使用二分法,在本题中要求“最大的最小磁力”,我们先考虑最小磁力,最小磁力肯定出现在相邻两个数之间,比如数组:

[12346]

的最小磁力就是1,要求取最小磁力,只需要遍历一遍即可。

接下来我们来考虑最大磁力,在有序数组中要放置m个小球,也就是会产生m-1个距离,最大值为max,最小值为min,如果数组是连续的(在题意中就是假设所有位置都有篮子,但实际上可能不满足),那么小球均匀摆布的情况下能取到最大磁力:

( m a x − m i n ) / ( m − 1 ) (max - min)/(m-1) (maxmin)/(m1)

上面所求的最小磁力就是左边界,最大磁力就是右边界。题目中所要求的两球之间最大的最小磁力就落在左右边界之间。对此,我们可以用二分法的思想,先取左右边界的中点mid,再判断当前数组是否能满足当前mid值(也就是能否放置所有小球,满足两球之间最大的最小磁力值为mid),对于判断结果,有两种情况:

  1. 可以满足。说明我们一开始估计的左边界过小,所以更新 左边界=mid+1
  2. 不满足。说明有边界过大,所以更新右边界=mid-1

最后的问题就是如何判断当前数组能否放下满足当前mid值呢?

我们需要编写一个check函数,然后从数组头部开始向后遍历。思路是:有序数组的第一个位置肯定是要放置小球,因为要满足最大最小磁力值≥mid,所以摆放小球的第二个小球与第一个小球的距离 d 1 d_1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值