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

通过万岁!!!

  • 题目:这个题目比较复杂,就是给你一个坐标轴,然后让你以0,0为中心选择一个边长为整数的正方形,使得正方形中所有点坐标的绝对值之和要大于给定的neededApples。但是我们需要输出的是这个正方形的周长。
  • 基础思路:我们首先把思路定在第一象限,然后坐标轴x的长度8,则得到最后要的周长。我们以x的长度为2进行举例,并且我们只考虑周长上的点,那么我们第一象限需要考虑的点就是(1,2)、(2,2)、(2,1)、(2,0)。需要注意的是(0,2)和(2,0)我们只需要考虑一个就好了。然后我们沿着第一象限正方形的对角线(y=x)对正方形分成两部分,然后只考虑垂直于x轴的这条边,上面的点包括(2,2)、(2,1)、(2,0),我们发现在第一象限中,(2,2)和(2,0)我们只需要计算一次,但是(2,1)这种情况我们需要计算两次。也就是说,在第一象限中,一条边上的点,头尾我们只需要计算一次就好了,但是中间的我们需要计算两次。以垂直于x轴的边来说,正方形的变成为i,则(i,0)和(i,i)我们只需要计算一次,(i,k)则需要计算两次。然后最后将这个结果4,则得到边长为2*i时正方形边上的苹果个数。剩下的就是只需要把上次的加上,然后看一下是不是大于neededApples就好了。上面的代码就得到的第一版,但是这个代码超时了。写完以后就发现,其实可以优化的。
    示意图
  • 优化思路:其实里面的for循环我们可以优化的,(i,k)的点我们需要计算2次,一共由i-1个点。那么针对x坐标来说有i*(i-1)2个苹果,对于y坐标来说,我们有(1+2+…+(i-1))2个苹果,然后再加上首位两个i2+i,然后再4个象限,最终换算出来的结果是12ii。所以while中的代码最终可以优化为i++以后,sum+=12ii。
  • 技巧:数学

java代码——基础思路

class Solution {
    public long minimumPerimeter(long neededApples) {
        long i = 1, sum = 12;
        while (sum < neededApples) {
            i++;
            sum += (i + i) * 4;// (i,i)这个点
            sum += i * 4;// (i,0)这个点
            for (int k = 1; k < i; k++) {
                sum += (i + k) * 2 * 4;// 中间的(i,k)的点
            }
        }
        return i * 8;
    }
}

java代码——优化思路

class Solution {
    public long minimumPerimeter(long neededApples) {
        long i = 1, sum = 12;
        while (sum < neededApples) {
            i++;
            sum += 12 * i * i;
        }
        return i * 8;
    }
}
  • 总结:题目不是特别难,但是要发现这里面的规律,画画图其实就出来了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/273217.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

阿里云OpenSearch-LLM智能问答故障的一天

上周五使用阿里云开放搜索问答版时&#xff0c;故障了一整天&#xff0c;可能这个服务使用的人比较少&#xff0c;没有什么消息爆出来&#xff0c;特此记录下这几天的阿里云处理过程&#xff0c;不免让人怀疑阿里云整体都外包出去了&#xff0c;反应迟钝&#xff0c;水平业余&a…

ServletConfig对象.

是什么 ServletConfig是javax.servlet.包下的一个接口&#xff0c;ServletConfig它是Servlet的一个配置对象&#xff1b; ServletConfig是由tomcat容器创建&#xff0c;通过init方法传入给Servlet&#xff1b; ServletConfig对象如何获取? 在GenericServlet里面定义了&#x…

Upload-lab(pass1~2)

Pass-1-js检查 这里检验 因为是前端js校验,所以只用绕过js前端校验 用burp抓包修改文件类型 写一个简易版本的php Pass-2-只验证Content-type 仅仅判断content-type类型 因此上传shell.php抓包修改content-type为图片类型&#xff1a;image/jpeg、image/png、image/gif

git集成github(一):主要步骤

一、创建仓库 1、创建本地git仓库 在pcharm主界面顶栏&#xff0c;点击VCS&#xff0c;再点击创建git仓库&#xff0c;然后选择项目根路径&#xff0c;点击确认。这时&#xff0c;可以看到顶栏的VCS变成了git。 2、远程仓库下载到本地 打开一个远程仓库&#xff0c;点击code…

Servlet入门

目录 1.Servlet介绍 1.1什么是Servlet 1.2Servlet的使用方法 1.3Servlet接口的继承结构 2.Servlet快速入门 2.1创建javaweb项目 2.1.1创建maven工程 2.1.2添加webapp目录 2.2添加依赖 2.3创建servlet实例 2.4配置servlet 2.5设置打包方式 2.6部署web项目 3.servl…

Flink Has Become the De-facto Standard of Streaming Compute

摘要&#xff1a;本文整理自 Apache Flink 中文社区发起人、阿里巴巴开源大数据平台负责人王峰&#xff08;莫问&#xff09;&#xff0c;在 Flink Forward Asia 2023 主会场的分享。Flink 从 2014 年诞生之后&#xff0c;已经发展了将近 10 年&#xff0c;尤其是最近这些年得到…

【Windows】共享文件夹拍照还原防火墙设置(入站,出站设置)---图文并茂详细讲解

目录 一 共享文件夹(两种形式) 1.1 普通共享与高级共享区别 1.2 使用 二 拍照还原 2.1 是什么 2.2 使用 三 防火墙设置&#xff08;入栈&#xff0c;出站设置&#xff09; 3.1 引入 3.2 入站出站设置 3.2.1入站出站含义 3.3入站设置 3.4安装jdk 3.5使用tomcat进行访…

nat地址转换

原理 将内网地址转换成外网地址 方式 掌握动态NAT的配置方法 掌握Easy IP的配置方法 掌握NAT Server的配置方法 实验 r1 r2 是内网 ar1 ip地址 ip add ip地址 掩码 ip route-static 0.0.0.0 0 192.168.1.254 默认网关 吓一跳网关 相等于设置了网关 ar2 …

低代码选型注意事项

凭借着革命性的生产力优势&#xff0c;低代码技术火爆了整个IT圈。面对纷繁复杂的低代码和无代码产品&#xff0c;开发者该如何选择&#xff1f; 在研究低代码平台的年数上&#xff0c;本人已有3年&#xff0c;也算是个低代码资深用户了&#xff0c;很多企业面临低代码选型上的…

内网穿透的应用-Ubuntu安装XRDP远程桌面结合内网穿透实现远程桌面Ubuntu

文章目录 一、 同个局域网内远程桌面Ubuntu二、使用Windows远程桌面连接三、公网环境系统远程桌面Ubuntu1. 注册cpolar账号并安装2. 创建隧道&#xff0c;映射3389端口3. Windows远程桌面Ubuntu 四、 配置固定公网地址远程Ubuntu1. 保留固定TCP地址2. 配置固定的TCP地址3. 使用…

ES-搜索

聚合分析 聚合分析&#xff0c;英文为Aggregation&#xff0c;是es 除搜索功能外提供的针对es 数据做统计分析的功能 - 功能丰富&#xff0c;提供Bucket、Metric、Pipeline等多种分析方式&#xff0c;可以满足大部分的分析需求 实时性高&#xff0c;所有的计算结果都是即时返回…

什么是多域名证书

SSL多域名证书&#xff0c;也称为UCC证书或SAN SSL证书&#xff0c;是一种特殊类型的SSL证书&#xff0c;可以在一个SSL证书中包含多个域名&#xff08;Subject Alternative Name&#xff09;。与传统的SSL证书不同&#xff0c;通常只绑定到一个特定的域名或子域名上&#xff0…

Bug:Too many open files【ulimit限制】

Bug&#xff1a;Too many open files 今天在开发某个下载功能时&#xff0c;发现文件总是下载到250多个程序就挂掉&#xff0c;同时会打崩服务器&#xff0c;查看错误日志发现报&#xff1a;too many open files. 思路&#xff1a;根据错误信息可以知道打开的文件数过多&#x…

从PDF中提取图片

由于工作需要&#xff0c;要从pdf文件中提取出图片保存到本地&#xff0c;项目中就引用到了Apache PDFBox库。 1 什么是Apache PDFBox? Apache PDFBox库&#xff0c;一个用于处理PDF文档的开源Java工具。它允许用户创建全新的PDF文件&#xff0c;操作现有的PDF文档&#xff0…

Spring实战系列(三)了解容器的基本实现

我们可以通过GitHub或者码云下载spring-framework源码&#xff0c;这边是基于5.X版本进行下载学习的。 地址&#xff1a;https://github.com/spring-projects/spring-framework 分析Spring源码是非常一件的难的事情&#xff0c;只能一步步学习&#xff0c;一步步记录。 前面在…

00-Git 应用

Git 应用 一、Git概述 1.1 什么是Git git 是一个代码协同管理工具&#xff0c;也称之为代码版本控制工具&#xff0c;代码版本控制或管理的工具用的最多的&#xff1a; svn、 git。 SVN 是采用的 同步机制&#xff0c;即本地的代码版本和服务器的版本保持一致&#xff08;提…

strlen和sizeof的初步理解

大家好我是Beilef&#xff0c;一个美好的下我接触到编程并且逐渐喜欢。我虽然不是科班出身但是我会更加努力地去学&#xff0c;有啥不对的地方请斧正 文章目录 目录 文章目录 前言 想必大家对sizeof肯定很了解&#xff0c;那对strlen又了解多少。其实这个问题应该让不少人困扰。…

MinGW64CMake编译3D模型导出工具assimp.exe

一.Assimp开源项目 针对OBJ,FBX,X等3D模型动画文件进行处理和转化的开源项目,可对各种3D数据结构文件进行内容解析和导出. gitee下载地址:Gitee 极速下载/Assimp - Gitee.com code\AssetLib:FBX,DAE,MD5等3D模型动画文件的解析,可查看对应格式文件的数据结构 tools\assimp_cmd:…

centos 安装oracle 11.2.04 并配置数据库自启动操作记录,一次完成

环境&#xff1a; centos版本7.3&#xff0c;安装的有图形化界面 Oracle11.2.04&#xff0c;之所以选择这个版本是因为网上有人说11其他版本的在安装的过程中会出现这样或那样的问题&#xff0c;下载地址放到文章下面 步骤&#xff0c;按顺序&#xff1a; 1、创建安装Oracle…

【zip密码】zip文件打开密码忘了怎么办

Zip压缩包设置了密码&#xff0c;解压的时候就需要输入正确对密码才能顺利解压出文件&#xff0c;正常当我们解压文件或者删除密码的时候&#xff0c;虽然方法多&#xff0c;但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么&#xff0c;忘记了zip压缩包的密…