【Breadth-first Search 】279. Perfect Squares

输入:一个非负整数n。
输出:这个非负整数可以写成几个完全平方数。返回这个数量。
规则:完全平方数可以表示为某个整数的平方。例如:1,4,9…
分析:13=4+9 也就是说13可以写成2个完全平方数的和。我可以先把13写成1+1+1+…+1,13个1相加。接着去拼2∗2=42*2=422=4,可以写成4+4+4+1。接着去拼3∗3=93*3=933=9, 可以写成9+4。接着去拼4∗4=164*4=1644=16,16>13,退出。O__O "…没有写代码实现。
学习1:计算n以内的完全平方数,得到列表perfectSquares。
 初始化数组int[] cntPerfectSquares。perfectSquares所有值val,cntPerfectSquares[val]=1。
 以n以内的完全平方数为起点:1,4,9,… 每个节点i 与perfectSquares所有数据分别相加达到新的节点j,cntPerfectSquares[j]=cntPerfectSquares[i]+1。如果j=n,则退出返回cntPerfectSquares[n]。
 思路是这样的。可以使用BFS或者DP实现。

//BFS
public int numSquares(int n) {List<Integer> perfectSquares = new ArrayList<Integer>();int[] cntPerfectSquares = new int[n];for(int i=1;i*i<=n;i++){if(i*i==n) return 1;perfectSquares.add(i*i);cntPerfectSquares[i*i-1] = 1;}Queue<Integer> queue = new LinkedList<Integer>();for(Integer val : perfectSquares){queue.offer(val);}while(!queue.isEmpty()){int size = queue.size();for(int i=0;i<size;i++){int val = queue.poll();for(Integer val2 : perfectSquares){if(val+val2==n) return 1+cntPerfectSquares[val-1];if(val+val2<n && cntPerfectSquares[val+val2-1]==0){cntPerfectSquares[val+val2-1] = 1+cntPerfectSquares[val-1];queue.offer(val+val2);}}}}return -1;}

DP思路:cntPerfectSquares[i]表示至少有cntPerfectSquares[i]个完全平方数的相加等于i。
cntPerfectSquares[0]=1;
cntPerfectSquares[1]=1;
cntPerfectSquares[2]=cntPerfectSquares[2-1]+1;
cntPerfectSquares[3]=cntPerfectSquares[3-1]+1;
cntPerfectSquares[4]=Min(cntPerfectSquares[4−1∗1]+1,cntPerfectSquares[4−2∗2]+1))cntPerfectSquares[4]=Min(cntPerfectSquares[4-1*1]+1,cntPerfectSquares[4-2*2]+1))cntPerfectSquares[4]=Min(cntPerfectSquares[411]+1,cntPerfectSquares[422]+1))

cntPerfectSquares[i]=Min[cntPerfectSquares[i],cntPerfectSquares[i−j∗j]+1]cntPerfectSquares[i]=Min[cntPerfectSquares[i],cntPerfectSquares[i-j*j]+1]cntPerfectSquares[i]=Min[cntPerfectSquares[i],cntPerfectSquares[ijj]+1], 1&lt;=i&lt;=n1&lt;=i&lt;=n1<=i<=n,1&lt;=j∗j&lt;=i1&lt;=j*j&lt;=i1<=jj<=i

public int numSquaresV2(int n) {int[] cntPerfectSquares = new int[n+1];//设置最大值for(int i=0;i<cntPerfectSquares.length;i++){cntPerfectSquares[i] = n+1;}cntPerfectSquares[0] = 0;for(int i=1;i<=n;i++){for(int j=1;j*j<=i;j++){cntPerfectSquares[i] = Math.min(cntPerfectSquares[i],cntPerfectSquares[i-j*j]+1);}}return cntPerfectSquares[n];}

代码

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vs设置html的模板快

打开vs编辑器&#xff0c;点击文件--》首选项--》用户代码片段 之后选择先对应的编辑器模板 进入里面编写相对应的代码块 之后直接在编辑器中调用。 转载于:https://www.cnblogs.com/zengsf/p/10929653.html

【数据结构与算法】【算法思想】【算法应用】【排序查找搜索】并行

算法的目的就是为了提高代码执行的效率。当算法无法再继续优化的情况下&#xff0c;需要借助并行计算的处理思想对算法进行改造。 并行排序 假设要给大小为 8GB 的数据进行排序&#xff0c;最常用的是三种排序算法&#xff0c;归并排序、快速排序、堆排序&#xff0c;时间复杂…

第二十一期:干货盘点!推荐程序员使用的5款工具软件

说到程序员&#xff0c;大多数人脑袋里显现出来的第一个画面应当就是一个面容冷漠的人指尖在键盘上快速飞跃敲出一行行看不懂的字符就能轻而易举入侵别人的系统。然而想象很丰满&#xff0c;现实是很骨感的&#xff0c;大多数程序员都只是一个简单的码农。 作者&#xff1a;四…

207. Course Schedule

输入&#xff1a;课程数量n&#xff0c;每个课程的编号是0到n-1。课程学习的先后顺序用数组输入&#xff0c;例如[0,1]。要学习课程0&#xff0c;需要先学习课程1。 输出&#xff1a;如果可以学习完所有的课程&#xff0c;返回true&#xff0c;否则返回false。 分析&#xff1a…

第二十二期:New一个对象的时候发生了什么?

如你所知&#xff0c;Java是一门面向对象的编程语言。我们平常在写代码的时候也是在不停的操作各种对象&#xff0c;那么当你在写出User user new User();这样一行代码的时候&#xff0c;JVM都做了些什么呢&#xff1f; 作者&#xff1a;湖人总冠军 一、引言 如你所知&#…

Docker 第四章 访问容器

访问仓库 仓库&#xff08;Repository&#xff09;是集中存放镜像的地方。 一个容易混淆的概念是注册服务器&#xff08;Registry&#xff09;。实际上注册服务器是管理仓库的具体服务器&#xff0c;每个服务器上可以有多个仓库&#xff0c;而每个仓库下面有多个镜像。从这方面…

【数据结构与算法】【算法思想】Dijkstra算法

图的两种搜索算法&#xff0c;深度优先搜素和广度优先搜索。这两种算法主要是针对无权图的搜索算法。针对有权图&#xff0c;也就是图中的每条边都有一个权重&#xff0c;该如何计算两点之间的最短路径&#xff1f;最短路径算法&#xff08;Shortest Path Algorithm&#xff09…

第二十三期:程序员节Keep被曝突然裁员300多人,60%是开发和运营

社交健身App “Keep”突然裁员超300人&#xff0c;而且是在1024程序员节。此次被裁的人员中&#xff0c;大约有60%的人是开发和运营&#xff0c;补偿方案为N1。 作者&#xff1a;三言财经 10月24日脉脉有多条消息称&#xff0c;社交健身App “Keep”突然裁员超300人&#xff0…

542. 01 Matrix

输入&#xff1a;元素值为0或者1的矩阵。 输出&#xff1a; 每个元素距离0的最近距离是多少。 规则&#xff1a;相邻单元格的距离是1&#xff0c;相邻是指上下左右4个方向。 分析&#xff1a;这类似于学习课程安排&#xff0c;可以从元素值为0的单元开始沿4个方向遍历。matrix[…

C++学习第二天(打卡)

C new 可以很方便的 分配一段内存。 比如 int *test new int ;int n;cin>>n;int * test new int [n]; 可以实现动态分配内存&#xff0c;比c的malloc 简洁多了&#xff0c; 同样也能new 一个 结构体。总之挺方便的。 new 之后 不用了 要用delet free 内存 另外对空指…

【数据结构与算法】【算法思想】 A *搜索算法

算法解析 这是一个非常典型的搜索问题。人物的起点就是他当下所在的位置&#xff0c;终点就是鼠标点击的位置。我们需要在地图中&#xff0c;找一条从起点到终点的路径。这条路径要绕过地图中所有障碍物&#xff0c;并且看起来要是一种非常聪明的走法。所谓“聪明”&#xff0…

第二十四期:管理 | 成功领导远程IT团队的7个技巧

管理虚拟工作环境需要各种真实世界的技能和工具。以下是激发创造力和生产力的策略。为了在日益缺乏人才和竞争激烈的IT世界中取得成功&#xff0c;越来越多的企业开始依赖于地理上分散的劳动力。 作者&#xff1a;John Edwards 管理虚拟工作环境需要各种真实世界的技能和工具…

310. Minimum Height Trees

输入&#xff1a;包含n个节点的无向图。n&#xff1a;表示从0到n-1&#xff0c;n个节点。edges&#xff1a;int数组&#xff0c;是从一个节点到另外一个节点。但是没有方向。 输出&#xff1a;以哪些节点为根节点&#xff0c;具有最小高度的树&#xff0c;返回这些根节点。 规则…

计算获取最小值和最大值

比如&#xff0c;在下面的销售业绩中&#xff0c;统计业务员的销售业绩中最大值和最小值。 下面是业务数据&#xff1a; CREATE TABLE [dbo].[SalesPerformance]([ID] [int] IDENTITY(1,1) NOT NULL,[Salesman] NVARCHAR(30) NOT NULL,[OrderDate] [DATE] NULL,[Sell] DECIM…

第二十五期:知乎用Go替代Python,说明了啥

众所周知&#xff0c;知乎早在几年前就将推荐系统从 Python 转为了 Go。于是乎&#xff0c;一部分人就说 Go 比 Python 好&#xff0c;Go 和 Python 两大社区的相关开发人员为此也争论过不少&#xff0c;似乎&#xff0c;谁也没完全说服谁。 作者&#xff1a;hello架构 大概每…

[Leetcode][第106题][JAVA][ 从中序与后序遍历序列构造二叉树][分治][递归]

【问题描述】[中等] 【解答思路】 public class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) {int inLen inorder.length;int postLen postorder.length;// 特判if (inLen ! postLen) {throw new RuntimeException("输入错误");}return …

Springboot初次学习

-- 介绍取自springboot中文文档 &#xff1a;https://www.breakyizhan.com/springboot/3032.html Spring Boot可以轻松创建可以运行的独立的&#xff0c;生产级的基于Spring的应用程序。我们对Spring平台和第三方库采取自己的看法&#xff0c;以便您尽可能轻松地使用本教程。大…

第二十六期:英国建设下一代IOT基础设施的历史机遇和挑战

无论未来物联网发展的中心在哪里&#xff0c;都会带来一笔巨大的财富。但许多地区面临的真正障碍是缺乏可用的光纤基础设施来形成回程网络。接下来看一看全光纤在英国的推广情况。 作者&#xff1a;风车云马编译 世界各地的市政当局都在呼吁制定支持5G的基础设施计划。这些基…

[Leetcode][第889题][JAVA][根据前序和后序遍历构造二叉树][分治][递归]

【问题描述】[中等] 【解答思路】 copyOfRange class Solution {public TreeNode constructFromPrePost(int[] pre, int[] post) {if(prenull || pre.length0) {return null;}return dfs(pre,post);}private TreeNode dfs(int[] pre,int[] post) {if(prenull || pre.length0)…

第二十七期:Deepfake视频正在快速传播,也许区块链能够阻止这波“瘟疫”

“假新闻”一词已经成为当下的热门话题&#xff0c;而Deepfake(即看似真实&#xff0c;但实为伪造的视频操纵行为)则会进一步加剧民众与媒体之间的不信任危机。 作者&#xff1a;佚名来源 “假新闻”一词已经成为当下的热门话题&#xff0c;而Deepfake(即看似真实&#xff0c;…