LeetCode 刷题日志

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

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

难度: 中等

题目大意:

给你一个用无限二维网格表示的花园,每一个 整数坐标处都有一棵苹果树。整数坐标 (i, j) 处的苹果树有 |i| + |j| 个苹果。

你将会买下正中心坐标是 (0, 0) 的一块 正方形土地 ,且每条边都与两条坐标轴之一平行。

给你一个整数 neededApples ,请你返回土地的 最小周长 ,使得 至少neededApples 个苹果在土地 里面或者边缘上

  • 1 <= neededApples <= 10^15

Leetcode

思考:

这个图形是很对称的,那么很自然会想到要推导一个用边长来表示边上的所有苹果数量,而且我们只需要计算出第一象限的苹果即可,假设最右边的的横坐标是x,那我们只需要计算(x, 0) (x, x),然后根据对称性乘以4,然后对边长上的苹果求一个和

公式推导:
∑ x 2 x r = 3 x ( x + 1 ) 2 , 边上苹果数 = 4 ∗ ∑ x 2 x r = 6 x ( x + 1 ) = 6 ( x 2 + x ) \sum_x^{2x}{r} = \frac {3x(x + 1)}{2},边上苹果数 = 4 * \sum_x^{2x}{r} =6x(x + 1)=6(x^2 + x) x2xr=23x(x+1),边上苹果数=4x2xr=6x(x+1)=6(x2+x)

∑ 0 n r 2 = n ( n + 1 ) ( 2 n + 1 ) 6 \sum_0^nr^2 = \frac{n(n + 1)(2n + 1)}6 0nr2=6n(n+1)(2n+1)

∑ 苹果 = ∑ 0 n 6 ( x 2 + x ) = 2 n ( n + 1 ) ( 2 n + 1 ) \sum苹果 = \sum_0^n6(x^2 + x) = 2n(n + 1)(2n + 1) 苹果=0n6(x2+x)=2n(n+1)(2n+1)

就有了下面两种思路:

暴力枚举

我们至于要枚举边长,如果达到了要求,直接返回即可

代码实现

class Solution {
   
public:
    using LL = long long;
    long long minimumPerimeter(long long neededApples) {
   
        LL res = 0, sum = 0;
        for (int i = 0; ; i ++) {
   
            sum += 12 * (LL)i * i;
            if (sum >= neededApples) {
   
                res = i;
                break;
            }
        }
        return res * 8;
    }
};

考虑优化方案, 要满足2n(n + 1)(2n + 1) - k >= 0 我们画出这个图像

在这里插入图片描述

我们只需要求出与x正方向的交点即可,就有了下面这个思路

二分查找

注意到,在x0左侧的这一部分都是小于0的,在x0的右侧都是大于0的,这样就可以二分了

代码实现

class Solution {
   
public:
    using LL = long long;
    long long minimumPerimeter(long long neededApples) {
   ;
        double l = 0, r = 70000;
        auto check = [&](double mid) -> bool {
   
            return 2 * mid * (mid + 1) * (2 * mid + 1) - neededApples < 0;
        };
        while (r - l > 1e-6) {
   
            double mid = (l + r) / 2;
            if (check(mid)) l = mid;
            else r = mid;
        }
        return ceil(l) * 8;
    }
};
  • ceil(x)函数是对x上取整

【微语】做你自己,因为其他角色都已经有人扮演了。

结束了

相关推荐

  1. leetcode笔记

    2023-12-29 06:00:02       21 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-29 06:00:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-29 06:00:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-29 06:00:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-29 06:00:02       18 阅读

热门阅读

  1. Zeppelin安装教程

    2023-12-29 06:00:02       33 阅读
  2. 使用pandas绘图,并保存,支持中文

    2023-12-29 06:00:02       30 阅读
  3. 07.kubernetes客户端部署

    2023-12-29 06:00:02       38 阅读
  4. oracle linux 8升级gcc gcc9

    2023-12-29 06:00:02       39 阅读
  5. Linux基础命令之系统管理常用命令

    2023-12-29 06:00:02       34 阅读
  6. pfc001 Not enough information

    2023-12-29 06:00:02       29 阅读
  7. trino-435:dynamic catalog

    2023-12-29 06:00:02       37 阅读
  8. (js)循环判断找到满足条件的单项后结束循环

    2023-12-29 06:00:02       34 阅读
  9. VUE笔记

    VUE笔记

    2023-12-29 06:00:02      31 阅读