首页 > 其他分享 >Leetcode: 俩球之间的磁力

Leetcode: 俩球之间的磁力

时间:2022-10-30 18:05:59浏览次数:53  
标签:int 二叉树 磁力 UE4 篮子 position 俩球 Leetcode


题目

在代号为 C-137 的地球上,Rick 发现如果他将两个球放在他新发明的篮子里,它们之间会形成特殊形式的磁力。Rick 有 n 个空的篮子,第 i 个篮子的位置在 position[i] ,Morty 想把 m 个球放到这些篮子里,使得任意两球间 最小磁力 最大。

已知两个球如果分别位于 x 和 y ,那么它们之间的磁力为 |x - y| 。

给你一个整数数组 position 和一个整数 m ,请你返回最大化的最小磁力。

示例:

输入:position = [1,2,3,4,7], m = 3
输出:3
解释:将 3 个球分别放入位于 1,4 和 7 的三个篮子,两球间的磁力分别为 [3, 3, 6]。最小磁力为 3 。我们没办法让最小磁力大于 3 。
输入:position = [5,4,3,2,1,1000000000], m = 2
输出:999999999
解释:我们使用位于 1 和 1000000000 的篮子时最小磁力最大。

解题思路

1.两球的最小距离的最小值,是1;最小距离的最大值是 (最后位置的球坐标 - 最前位置的球坐标) / (球数-1),这里需要先对position数组排序,那么易得最小球间距离的最大值为 (position[position.length - 1] - position[0]) / (m-1)。

2.有最小和最大,直觉想到二分法。以二分的中间值,作为间距去摆放球。如果摆放的球数 >=m, 可认为需要增加球间距 (同时保存中间值作为候选答案); 否则需要减少球间距。

3.一点总结是,当碰到求最大或最小值的时候,是否可转化为二分法。属于直觉和经验吧。

代码实现

class Solution {
public int maxDistance(int[] position, int m) {
Arrays.sort(position);
int left = 1, right = position[position.length - 1] - position[0], ans = -1;
while (left <= right) {
int mid = (left + right) / 2;
if (check(mid, position, m)) {
ans = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
return ans;
}

public boolean check(int x, int[] position, int m) {
int pre = position[0], cnt = 1;
for (int i = 1; i < position.length; i++) {
if (position[i] - pre >= x) {
pre = position[i];
cnt += 1;
}
}
return cnt >= m;
}
}

最后

  • 时间复杂度:O(nlog(nS)),其中 n 为篮子的个数,S 为篮子位置的上限。
  • 空间复杂度:O(logn),即为排序需要的栈空间。

我是杰少,如果您觉的我写的不错,那请给我 点赞+评论+收藏 后再走哦!

往期文章:

  • ​​# UE4:来为我们的角色制作一个血条吧​​
  • ​​使用 Google Breakpad 来助力解决程序崩溃​​
  • ​​UE4 多人游戏服务器探索​​
  • ​​使用虚幻引擎自动化工具实现自动化部署​​
  • ​​如何在 UE4 中制作一扇自动开启的大门​​
  • ​​如何在 UE4 中用代码去控制角色移动​​
  • ​​如何给 UE4 场景添加游戏角色​​
  • ​​UE4:Android 平台开发实践指南​​
  • ​​UE4 开发避坑指南(持续更新)​​
  • ​​新年开工啦,放个小烟花庆祝一下​​
  • ​​聊聊与苹果审核员的爱恨情仇(下)​​
  • ​​聊聊与苹果审核员的爱恨情仇(上)​​
  • ​​一名普通工具人的 2021 | 2021年终总结​​
  • ​​二叉树刷题总结:二叉搜索树的属性​​
  • ​​二叉树总结:二叉树的属性​​
  • ​​二叉树总结:二叉树的修改与构造​​
  • ​​StoreKit2 有这么香?嗯,我试过了,真香​​
  • ​​看完这篇文章,再也不怕面试官问我如何构造二叉树啦!​​
  • ​​那帮做游戏的又想让大家氪金,太坏了!​​
  • ​​手把手带你撸一个网易云音乐首页 | 适配篇​​
  • ​​手把手带你撸一个网易云音乐首页(三)​​
  • ​​手把手带你撸一个网易云音乐首页(二)​​
  • ​​手把手带你撸一个网易云音乐首页(一)​​
  • ​​代码要写注释吗?写你就输了​​
  • ​​Codable发布这么久我就不学,摸鱼爽歪歪,哎~就是玩儿​​
  • ​​iOS 优雅的处理网络数据,你真的会吗?不如看看这篇​​
  • ​​UICollectionView 自定义布局!看这篇就够了​​
  1. 关注公众号--- HelloWorld杰少

标签:int,二叉树,磁力,UE4,篮子,position,俩球,Leetcode
From: https://blog.51cto.com/u_15452588/5807571

相关文章

  • Leetcode 6233 -- dfs序
    题目描述给定我们一棵树,和一组查询,每个查询给出一个节点,让我们求删除以这个节点为根(包括这个节点)的子树中的所有节点之后(并不是真的删除),剩下的树中节点的最大高度。(树的......
  • leetcode-989-easy
    AddtoArray-FormofIntegerThearray-formofanintegernumisanarrayrepresentingitsdigitsinlefttorightorder.Forexample,fornum=1321,thearr......
  • leetcode 第90场双周赛
    6226.摧毁一系列目标题意:对于数组中每一个数nums[i],可以摧毁数组中值等于nums[i]+c*space的数(c为非负整数),求摧毁最大数量时的最小nums[i]思路:如果两个数x,y可以同时被摧......
  • leetcode103-二叉树的锯齿形层序遍历
    103.二叉树的锯齿形层序遍历用两个栈来实现。先把根节点放入第一个栈。循环内部根据哪个栈为空判断新的节点放到哪个栈,确定先左还是先右。当两个栈都为空时,循环结束。......
  • LeetCode 2458. Height of Binary Tree After Subtree Removal Queries
    原题链接在这里:https://leetcode.com/problems/height-of-binary-tree-after-subtree-removal-queries/题目:Youaregiventhe root ofa binarytree with n node......
  • leetcode-1790-easy
    CheckifOneStringSwapCanMakeStringsEqualYouaregiventwostringss1ands2ofequallength.Astringswapisanoperationwhereyouchoosetwoindices......
  • leetcode-2160-easy
    MinimumSumofFourDigitNumberAfterSplittingDigitsYouaregivenapositiveintegernumconsistingofexactlyfourdigits.Splitnumintotwonewintegers......
  • leetcode-1748-easy
    SumofUniqueElementsYouaregivenanintegerarraynums.Theuniqueelementsofanarrayaretheelementsthatappearexactlyonceinthearray.Returnthe......
  • leetcode102-二叉树的层序遍历
    102.二叉树的层序遍历有两种实现方法。第一种是递归,第二种是队列实现。第一种是看了别人的代码写出来的,第二种是自己写的。这道题的不能直接把遍历得到的数字直接塞进res......
  • 刷题 LeetCode二叉树2
    代码随想录LeetCode102.二叉树的层序遍历carl二叉树遍历#层序遍历#队列#广度优先思路队首是待访问节点,每访问一个节点,将其左子和右子加入队列细节如何知道某......