【每日一题】收集足够苹果的最小花园周长

Tag

【二分枚举答案】【二维网格】【2023-12-24】


题目来源

1954. 收集足够苹果的最小花园周长


解题思路

方法一:二分枚举答案

思路

通过如下过程,我们可以求出边长为 2n 时,二维网格可以容纳的苹果数量为:

2 n ( n + 1 ) ( 2 n + 1 ) 2n(n+1)(2n+1) 2n(n+1)(2n+1)

图片来源 【图解】O(1) 做法(Python/Java/C++/Go/JS/Rust)

随着边长的增大,二维网格可以容纳的苹果数量也在增大。于是我们可以二分枚举二维网格的边长,找出可以容纳 neededApples 个苹果的最小二维网格边长。

二分边界为 [1, 100000],其中 100000 是根据边长为 2n 的二维网格可以容纳苹果 2n(n+1)(2n+1) 估算得到。

算法

#define ll long long
class Solution {
   
public:
    long long minimumPerimeter(long long neededApples) {
   
        int l = 1, r = 100000;
        int ans = 0;
        while(l <= r){
   
            int mid = (l + r) >> 1;
            if((ll) 2*mid*(mid+1)*(2*mid+1) >= neededApples){
   
                ans = mid;
                r = mid - 1;
            }
            else{
   
                l = mid + 1;
            }
        }
        return ans * 8;
    }
};

复杂度分析

时间复杂度: O ( l o g m ) O(logm) O(logm) m = n e e d e d A p p l e s 3 m = \sqrt[3]{neededApples} m=3neededApples

空间复杂度: O ( 1 ) O(1) O(1)


写在最后

如果您发现文章有任何错误或者对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度的方法,欢迎评论区交流。

最后,感谢您的阅读,如果有所收获的话可以给我点一个 👍 哦。

最近更新

  1. TCP协议是安全的吗?

    2023-12-24 21:52:06       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-24 21:52:06       20 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-24 21:52:06       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-24 21:52:06       20 阅读

热门阅读

  1. 每日一题(LeetCode)----栈和队列--前 K 个高频元素

    2023-12-24 21:52:06       41 阅读
  2. C语言每日一题(1)字符串逆序

    2023-12-24 21:52:06       40 阅读
  3. Python发送数据到Unity实现

    2023-12-24 21:52:06       38 阅读
  4. 一文理解 Python 中的环境变量

    2023-12-24 21:52:06       48 阅读
  5. 【spring源码之publishEvent解析】

    2023-12-24 21:52:06       38 阅读