每日一题 279完全平方数(完全背包)

题目

完全平方数
给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。

完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。

示例 1:

输入:n = 12
输出:3
解释:12 = 4 + 4 + 4
示例 2:

输入:n = 13
输出:2
解释:13 = 4 + 9

提示:

1 <= n <= 104

题解

记忆化搜索

class Solution {private int[][] cache;public int numSquares(int n) {// if (n == 1) {//     return 1;// }int len = (int) Math.sqrt(n);cache = new int[len][n + 1];for (int i = 0; i < len; i++) {Arrays.fill(cache[i],-1);}int ans = dfs(len - 1, n);return ans < Integer.MAX_VALUE / 2 ? ans : -1;}public int dfs(int i, int c) {if (i < 0) {return c == 0 ? 0 : Integer.MAX_VALUE / 2;}if (cache[i][c] != -1) {return cache[i][c];}if (c < (i + 1) * (i + 1)) {return cache[i][c] = dfs(i - 1, c);}return cache[i][c] = Math.min(dfs(i - 1, c), dfs(i, c - (i + 1) * (i + 1)) + 1);}
}

递推

class Solution {public int numSquares(int n) {int len = (int)Math.sqrt(n);int[][] f = new int[2][n + 1];Arrays.fill(f[0], Integer.MAX_VALUE / 2);f[0][0] = 0;for (int i = 0; i < len; i++) {for (int c = 1; c <= n; c++) {if (c < (i + 1) * (i + 1)) {f[(i + 1)%2][c] = f[i%2][c];} else {f[(i + 1)%2][c] = Math.min(f[i%2][c],f[(i + 1)%2][c - (i + 1) * (i + 1)] + 1);}}}int ans = f[len%2][n];return ans < Integer.MAX_VALUE / 2 ? ans : -1;}
}
两个数组优化
class Solution {public int numSquares(int n) {int len = (int)Math.sqrt(n);int[][] f = new int[2][n + 1];Arrays.fill(f[0], Integer.MAX_VALUE / 2);f[0][0] = 0;for (int i = 0; i < len; i++) {for (int c = 1; c <= n; c++) {if (c < (i + 1) * (i + 1)) {f[(i + 1)%2][c] = f[i%2][c];} else {f[(i + 1)%2][c] = Math.min(f[i%2][c],f[(i + 1)%2][c - (i + 1) * (i + 1)] + 1);}}}int ans = f[len%2][n];return ans < Integer.MAX_VALUE / 2 ? ans : -1;}
}
一个数组优化
class Solution {public int numSquares(int n) {int len = (int)Math.sqrt(n);int[] f = new int[n + 1];Arrays.fill(f, Integer.MAX_VALUE / 2);f[0] = 0;for (int i = 0; i < len; i++) {for (int c = (i + 1) * (i + 1); c <= n; c++) {f[c] = Math.min(f[c],f[c - (i + 1) * (i + 1)] + 1);}}int ans = f[n];return ans < Integer.MAX_VALUE / 2 ? ans : -1;}
}

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

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

相关文章

matplotlib制图进阶版

需求&#xff1a;两个产品销量的可视化折线图 1、使用pandas读取数据 2、生成销售数量的折线图

深入了解快速排序:原理、性能分析与 Java 实现

快速排序&#xff08;Quick Sort&#xff09;是一种经典的、高效的排序算法&#xff0c;被广泛应用于计算机科学和软件开发领域。本文将深入探讨快速排序的工作原理、步骤以及其在不同情况下的性能表现。 什么是快速排序&#xff1f; 快速排序是一种基于分治策略的排序算法&am…

vue2与vue3 v-model的区别

目录 Vue 2中的v-model 默认使用 自定义使用 修饰符.sync (Vue2) Vue3.x 使用 v-model vue 3 的v-model使用原理 多个 v-model 使用 总结 Vue 2中的v-model 在Vue 2中&#xff0c;v-model是一个用于在子组件和父组件之间双向绑定数据的指令。当在子组件中使用v-mode…

java学习-day21(常用类)

文章目录 回顾&#xff1a;今天的内容1.常用类1.1StringBuffer类1.2枚举类&#xff08;enum&#xff09;1.3包装类1.4Math1.5Random类1.6System类1.7Runtime【不重要】1.8Date类1.9Calendar 回顾&#xff1a; 1.为什么重写equals方法必须重写hashCode方法是因为判断两个对象是…

聊聊分布式架构04——RPC通信原理

目录 RPC通信的基本原理 RPC结构 手撸简陋版RPC 知识点梳理 1.Socket套接字通信机制 2.通信过程的序列化与反序列化 3.动态代理 4.反射 思维流程梳理 码起来 服务端时序图 服务端—Api与Provider模块 客户端时序图 RPC通信的基本原理 RPC&#xff08;Remote Proc…

2023-10-07 LeetCode每日一题(股票价格跨度)

2023-10-07每日一题 一、题目编号 901. 股票价格跨度二、题目链接 点击跳转到题目位置 三、题目描述 设计一个算法收集某些股票的每日报价&#xff0c;并返回该股票当日价格的 跨度 。 当日股票价格的 跨度 被定义为股票价格小于或等于今天价格的最大连续日数&#xff08…

全栈开发笔记2:项目部署上线的三种方式

文章目录 最原始的方式宝塔Docker 部署其他 本文为编程导航实战项目学习笔记。 项目部署的三种方式&#xff1a; 最原始方式✅ yum 手动安装 jdk mysql tomcat nginx打包前端项目&#xff0c;放到某个目录&#xff0c;修改 nginx 配置修改线上的 mysql 配置&#xff0c;打包 j…

RK3568 适配LVDS屏XW101CM02

代码如下添加参数,只要是使用的是同款屏幕,那就可以直接使用里面所有参数,在相关的DTS文件进行修改 lvds_panel: lvds-panel {status = "okay";compatible = "simple-panel";backlight = <&backlight1>;reset-delay-ms = <20>;enable-d…

Mysql bin-log日志恢复数据与物理备份-xtrabackup

主打一个数据备份与恢复 binlog与xtarbackup bin-log日志恢复开启bin-log配置bin-log日志恢复 物理备份-xtrabackup三种备份方式安装xtrabackup备份全量备份增量备份差异备份 bin-log日志恢复 bin-log 日志&#xff0c;就记录对数据库进行的操作&#xff0c;什么增删改的操作全…

深度学习笔记之优化算法(三)动量法的简单认识

机器学习笔记之优化算法——动量法的简单认识 引言回顾&#xff1a;条件数与随机梯度下降的相应缺陷动量法简单认识动量法的算法过程描述附&#xff1a;动量法示例代码 引言 上一节介绍了随机梯度下降 ( Stochastic Gradient Descent,SGD ) (\text{Stochastic Gradient Descen…

基础算法之——【动态规划之路径问题】1

今天更新动态规划路径问题1&#xff0c;后续会继续更新其他有关动态规划的问题&#xff01;动态规划的路径问题&#xff0c;顾名思义&#xff0c;就是和路径相关的问题。当然&#xff0c;我们是从最简单的找路径开始&#xff01; 动态规划的使用方法&#xff1a; 1.确定状态并…

MySQL SQL性能优化方案(SQL优化 二)

插入数据优化 1. 多个值同时插入&#xff1a;多个值的插入语句可以减少与数据库的通信次数&#xff0c;从而提高插入性能 insert into 表名 (列1, 列2, 列3) values (值1, 值2, 值3), (值4, 值5, 值6), ... 2. 命令批量插入&#xff1a;高效地将数据从文件导入到数据库中&…

vue3+vite+uniapp 封装一个省市区组件

一、预览图 二、使用前的一些注意事项 只支持在 uniapp vue3 项目中使用支持微信小程序和h5 (app端没有测试过)ui库用的 uview-plus省市区数据用的是 vant-ui 提供的一个赖库 vant/area-data 三、组件代码 <template><u-popup :show"show" type"botto…

软件工程与计算总结(二)软件工程的发展

本章开始介绍第二节内容&#xff0c;主要是一些历史性的东西~ 一.软件工程的发展脉络 1.基础环境因素的变化及其对软件工程的推动 抽象软件实体和虚拟计算机都是软件工程的基础环境因素&#xff0c;它们能从根本上影响软件工程的生产能力&#xff0c;而且是软件工程无法反向…

Zabbix 监控系统安装和部署

Zabbix 监控系统安装和部署 一、zabbix 是什么&#xff1f;1.1、zabbix 监控原理&#xff08;重点&#xff09;1.2、Zabbix 6.0 新特性1.3、Zabbix 6.0 功能组件1.4、数据库1.5、Web 界面1.6、Zabbix Agent1.7、Zabbix Proxy1.8、Java Gateway 二、部署Zabbix 6.02.1、 解决 za…

Configuration of phpstudy and sqli-labs

Go download the app&#xff1a; 小皮面板(phpstudy) - 让天下没有难配的服务器环境&#xff01; (xp.cn) Have done. Then enter the program. Enable both functions&#xff1a; Apache and MySQL. Open the website&#xff1a; Next, Lets make the sqli-liab. GitHub…

[论文笔记]GLM

引言 今天带来论文GLM: General Language Model Pretraining with Autoregressive Blank Infilling的笔记。论文中文标题为 通用语言模型预训练与自回归填空。 有很多不同类型的预训练架构,包括自编码模型(BERT、RoBERTa、ALBERT)、自回归模型(GPT系列)以及编码器-解码器模型…

系统架构设计:论文论点目录

目录 系统架构设计&#xff1a;1 论软件系统建模方法及其应用 系统架构设计&#xff1a;2 论软件设计方法及其应用 系统架构设计&#xff1a;3 软件架构建模技术与应用 系统架构设计&#xff1a;4 论微服务架构及其应用 系统架构设计&#xff1a;5 论软件的可靠性设计 系统…

基于MDK-Keil环境如何把STM32程序直接下载到SRAM运行

1. 前言 对于 Cortex-M 内核的微控制器&#xff0c;它们都可以支持在 RAM 中执行程序&#xff0c;有些非 ARM 的微控制器是不支持的。 在内部 SRAM 执行程序&#xff0c;有基于以下几方面的原因&#xff1a; 1、所使用的设备可能具有OTP&#xff08;One-time Programmable&a…

笔记一:odoo透视表和图表

透视表 1、首先在xml文件添加pivot 说明&#xff1a;&#xff08;1&#xff09;根元素pivot中属性&#xff1a; disable_linking&#xff1a;设置为True&#xff0c;删除表格单元格到列表视图的链接 display_quantity&#xff1a;设置为True&#xff0c;默认显示“数量”列 d…