题目链接1552. 两球之间的磁力中等算法原理解法二分查找贪心跟上题不能说极其相似只能说一摸一样改个变量名直接AC了D.二分查找二分答案最大化最小值——2517. 礼盒的最大甜蜜度49ms击败81.33%时间复杂度O(Nlogn)任意两球磁力绝对差的最小值排序后任意两相邻i小球磁力绝对差的最小值因为排序后不相邻的数作差一定≥相邻数作的差min时肯定不会被取到①目标变量磁力最小绝对差②目标条件在当前磁力情况下所选k个数中任意两数差值≥当前磁力且当前磁力要最大化③转换逻辑当前磁力为mid时能否选出k个数使得任意两个选中的数差值≥mid具体步骤①确定边界left0所有数选同一个值最小差为0rightposition[n-1]-position[0]排序后最大差最大值-最小值②确定二分模型磁力 ↑ 能选择的数的数量 ↓ 呈负相关单调由于要最大化磁力因此采用最右端点模型③check方法设计采用双指针贪心的方法贪心的点在于第一个点直接选position[0]以便给后续值留下更大差值空间在此之后再用双指针的方法prev记录前一个符合条件的值只要当前position-prev≥mid说明就找到了一个符合条件的点计数cnt当计数≥k时就可以返回了Java代码class Solution { public int maxDistance(int[] position, int m) { Arrays.sort(position); int nposition.length; int left0,rightposition[n-1]-position[0]; while(leftright){ int midleft(right-left1)/2; if(!check(mid,position,m)) rightmid-1; else leftmid; } return left; } //判断能否选出k个数使得任意两个选中的数差值≥mid private boolean check(int mid,int[] position,int m){ int cnt1; int prevposition[0]; for(int i1;iposition.length;i){ if(position[i]-prevmid){ cnt; prevposition[i]; //提前满足提前返回 if(cntm) return true; } } return cntm; } }