2023.12.24力扣每日一题——收集足够苹果的最小花园周长

题目来源

力扣每日一题2023.12.24;题序:1954

我的题解

方法一 枚举

假设边长为2n,周长则为8n。
n直接从1开始遍历到 ( 1 0 15 ) 1 3 (10^{15})^\frac{1}{3} (1015)31,为了简化计算,直接将右边界设为100000.
边长为2n的所有苹果之和计算:
对于坐标为(x,y)的树,有|x|+|y|个苹果,所有一块左上角坐标为(n,n)的正方形土地包括的苹果总数为: S n = ∑ x = − n n ∑ y = − n n ∣ x ∣ + ∣ y ∣ S_n=\sum_{x=-n}^{n}\sum_{y=-n}^{n}|x|+|y| Sn=x=nny=nnx+y
由于x和y是对称的,所以:
S n = 2 ∑ x = − n n ∑ y = − n n ∣ x ∣ S_n=2\sum_{x=-n}^{n}\sum_{y=-n}^{n}|x| Sn=2x=nny=nnx
   = 2 ∑ x = − n n ( 2 n + 1 ) ∣ x ∣ =2\sum_{x=-n}^{n}(2n+1)|x| =2x=nn(2n+1)x
   = 2 ( 2 n + 1 ) ∑ x = − n n ∣ x ∣ =2(2n+1)\sum_{x=-n}^{n}|x| =2(2n+1)x=nnx
   = 2 ( 2 n + 1 ) ( n + 1 ) =2(2n+1)(n+1) =2(2n+1)(n+1)

时间复杂度:O(m 1 3 ^\frac{1}{3} 31)
空间复杂度:O(1)

public  long minimumPerimeter(long neededApples) {
   
        long res=1;
        for(;res<100000;res++){
   
            if(caulApples(res)<neededApples){
   
                continue;
            }else{
   
                break;
            }
        }
        return res*2*4;
    }
    public  long caulApples(long len){
   
        long res=2*len*(len+1)*(2*len+1);
        return res;
    }
方法二 二分查找

因为Sn是随着n的增大而单调递增的,所以可以使用二分查找找到最小的n,使得Sn>=neededApples

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

public  long minimumPerimeter(long neededApples) {
   
  long left=1,right=100000;  
    long ans=0;  
    while(left<=right){
   
        long mid=((right-left)>>1)+left;
        long apples=caulApples(mid);
        if(apples>=neededApples){
   
            ans=mid;
            right=mid-1;
        }else if(apples<neededApples){
   
            left=mid+1;
        }
    }
    return left*2*4;
}
public  long caulApples(long len){
   
    long res=2*len*(len+1)*(2*len+1);
    return res;
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-27 10:04:04       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-27 10:04:04       97 阅读
  3. 在Django里面运行非项目文件

    2023-12-27 10:04:04       78 阅读
  4. Python语言-面向对象

    2023-12-27 10:04:04       88 阅读

热门阅读

  1. Spring Boot学习:Redis发布订阅

    2023-12-27 10:04:04       55 阅读
  2. SQL使用从入门到优化:目录

    2023-12-27 10:04:04       56 阅读
  3. Flink on K8S集群搭建及StreamPark平台安装

    2023-12-27 10:04:04       54 阅读
  4. Django、Python版本升级问题大汇总

    2023-12-27 10:04:04       58 阅读
  5. vue前端的ref()用法

    2023-12-27 10:04:04       54 阅读
  6. iOS获取手机型号(包含iOS15系列)

    2023-12-27 10:04:04       59 阅读
  7. 排序实训问答

    2023-12-27 10:04:04       58 阅读
  8. 博客搬家公告

    2023-12-27 10:04:04       60 阅读
  9. centos卸载jenkins

    2023-12-27 10:04:04       59 阅读
  10. python读取xlsx格式的excel

    2023-12-27 10:04:04       54 阅读
  11. 【测试开发】测试分类相关知识

    2023-12-27 10:04:04       48 阅读
  12. Hadoop-3.3.4集群部分lib缺失问题

    2023-12-27 10:04:04       56 阅读
  13. AutoSAR(基础入门篇)2.1Autosar架构中的AppL

    2023-12-27 10:04:04       60 阅读