力扣hot100 完全平方数 完全背包 滚动数组 四平方和定理

Problem: 279. 完全平方数
在这里插入图片描述

文章目录

  • 思路
  • 💖 完全背包
  • 💖 滚动数组优化
  • 💖 四平方和定理

思路

👨‍🏫 三叶神解

👨‍🏫 数学解法

💖 完全背包

⏰ 时间复杂度: O ( n 2 n ) O(n^2 \sqrt{n}) O(n2n )

class Solution {int INF = 0x3f3f3f3f;public int numSquares(int n){List<Integer> list = new ArrayList<>();int t = 1;while (t * t <= n){list.add(t * t);t++;}int m = list.size();int[][] f = new int[m + 1][n + 1];// f[i][j] 表示考虑前 i 个物品,凑出 j 所使用的最小元素个数Arrays.fill(f[0], INF);// 在 0 个物品中选,除了价值 0 外都是非法情况f[0][0] = 0;for (int i = 1; i <= m; i++){int x = list.get(i - 1);// x 表示当前物品的 价值for (int j = 0; j <= n; j++){f[i][j] = f[i - 1][j];// 不选当前物品for (int k = 1; k * x <= j; k++)// 选取 k 个当前物品if (f[i - 1][j - k * x] != INF)f[i][j] = Math.min(f[i][j], f[i - 1][j - k * x] + k);}}return f[m][n];}
}

💖 滚动数组优化

⏰ 时间复杂度: O ( n n ) O(n\sqrt{n}) O(nn )在这里插入图片描述

class Solution {public int numSquares(int n){int[] f = new int[n + 1];//f[i] 表示和为 i 的最小完全平方数和 的数量Arrays.fill(f, 0x3f3f3f3);f[0] = 0;for (int t = 1; t * t <= n; t++){int x = t * t;for (int j = x; j <= n; j++)f[j] = Math.min(f[j], f[j - x] + 1);}return f[n];}
}

💖 四平方和定理

class Solution {public int numSquares(int n) {//判断是否是 1if (isSquare(n)) {return 1;}//判断是否是 4int temp = n;while (temp % 4 == 0) {temp /= 4;}if (temp % 8 == 7) {return 4;}//判断是否是 2for (int i = 1; i * i < n; i++) {if (isSquare(n - i * i)) {return 2;}}return 3;}//判断是否是平方数private boolean isSquare(int n) {int sqrt = (int) Math.sqrt(n);return sqrt * sqrt == n;}
}

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

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

相关文章

Vue项目中axios的二次封装

Vue 项目中 axios 的二次封装 Vue 项目使用过程中一般会对 axios 进行二次封装, 以期在合适的时机处理一些全局的需求, 比如常见的 请求拦截器 和 响应拦截器. 接下来简单聊聊具体的操作步骤. 1, 下载 axios 模块 执行以下指令: import axios from axios;2, 封装 在 src 文…

072:vue+mapbox 点击某图层feature,高亮这部分

第072个 点击查看专栏目录 本示例是介绍如何在vue+mapbox中点击某图层feature,高亮这部分。思路是通过点击,获取点击部分的feature信息,生成一个新的source和layer,如果这个图层不为空,则清除之,相当于点击了别的地方,原有的高亮会删除掉,在别的地方高亮。 直接复制下…

探寻编码时代的潮流旋律

&#x1f6a9;本文介绍 随着技术的不断演进&#xff0c;编程语言作为软件开发的基石也在不断发展。作为一名扎根运维领域的工程师&#xff0c;我深感了解和把握编程语言的新趋势对于个人职业发展至关重要。在这篇博客中&#xff0c;我们将深入探讨当前编程语言领域的最新动态&…

VMware虚拟机自定义网段及物理机ping不通虚拟机问题解决

Vmware网络介绍&#x1f6dc; VMware虚拟机提供了几种网络模式&#xff0c;其中包括桥接模式&#xff08;Bridged Mode&#xff09;、NAT模式&#xff08;Network Address Translation Mode&#xff09;和仅主机模式&#xff08;Host-Only Mode&#xff09;。这些模式允许虚拟…

Android应用开发:基础小游戏开发

手机游戏成为人们日常娱乐的重要组成部分。如果您想踏入这个充满创意和技术挑战的领域&#xff0c;制作一个Android基础小游戏是个不错的开始。以下是从零开始制作Android小游戏的基础指南。 1选择开发环境和工具 Android Studio 是官方推荐的开发环境&#xff0c;它提供了强大…

页面嵌入iframe Cookie丢失问题解决

页面嵌入iframe Cookie丢失问题解决 遇到的问题 自身页面以iframe的形式嵌入三方页面中&#xff0c;双方域名不一致导致自身页面的cookie被某些浏览器拦截无法正常被保存到客户端 解决方案 后端将cookie以链接参数的形式带给前端前端在请求接口的时候将cookie放在请求头&…

Matlab中常见的数据平滑方式

文章目录 1. 移动平均&#xff1a;2. Loess平滑&#xff1a; 在 MATLAB 中&#xff0c;您可以使用不同的平滑技术对向量数据进行平滑处理。以下是其中两种常用的平滑方法&#xff1a;移动平均和Loess平滑。 1. 移动平均&#xff1a; % 示例数据 x 1:100; y randn(1, 100); …

《2023大数据产业年度创新技术突破》榜重磅发布丨第六届金猿奖

‍ 第六届年度金猿榜单/奖项 “第六届年度金猿季策划活动——2023大数据产业创新技术突破榜单/奖项”由金猿X数据猿X上海大数据联盟共同推出。 大数据产业创新服务媒体 ——聚焦数据 改变商业 第六届 “年度金猿季大型主题策划活动”由金猿、数据猿、上海大数据联盟共同组成的…

【playwright】新一代自动化测试神器playwright+python系列课程18_playwritht元素相关操作_等待元素到某种状态

元素相关操作_等待元素到某种状态 对于自动化测试来说&#xff0c;本质上就是定位元素、操作元素。网页上的元素有不同状态&#xff0c;有些元素本来不在网页的DOM中&#xff0c;经过某一步操作后才出现。有些元素是本来就已经在DOM中但是是隐藏的状态&#xff0c;经过某一步操…

JVM知识总结

1.概述 JVM指的是Java虚拟机&#xff0c;本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行Java字节码文件&#xff0c;作用是为了支持跨平台特性。 功能&#xff1a; 装载字节码&#xff0c;解释/编译为机器码 管理数据存储和垃圾回收 优化热点代码提升效率 …

uniapp中uview组件库的NoticeBar 滚动通知 使用方法

目录 #平台差异说明 #基本使用 #配置主题 #配置图标 #配置滚动速度 #控制滚动的开始和暂停 #事件回调 #API #Props #Events 该组件用于滚动通告场景&#xff0c;有多种模式可供选择 #平台差异说明 AppH5微信小程序支付宝小程序百度小程序头条小程序QQ小程序√√√√…

C++初入(四)

1.万能头文件 #include <bits/stdc.h> 里面包含了大量我们日常所需的头文件&#xff0c;如果使用它&#xff0c;我们就可以减少大量时间去写头文件&#xff0c;但是其实在平常练习和实际运用中&#xff0c;该头文件几乎没有实际价值&#xff0c;原因&#xff1a;1.里面…

web蓝桥杯真题--8、和手机相处的时光

介绍 现在都提倡健康使用手机&#xff0c;那么统计一下在一周中每天使用手机的情况吧&#xff01;本题使用 ECharts 实现统计手机使用时长的折线图&#xff0c;但是代码中存在 Bug 需要你去修复。 准备 开始答题前&#xff0c;需要先打开本题的项目代码文件夹&#xff0c;目…

【数据结构】平衡树

实现功能&#xff1a; 插入数值删除数值查询某排名的数字查询某数值的排名查询前驱后继 const int N 100010, INF 1e8;int n; struct Node {int l, r; // 左右子结点编号int key, val; // key:结点本身的值 val:为了使二叉树平衡的随机数int cnt, size; // cnt:当前结点的数…

Windows NT 3.5源代码已编译!

2020年5月&#xff0c;Windows NT 3.5 build 782源代码被泄露。然而&#xff0c;它缺少很多文件&#xff0c;包括编译器、链接器、头文件等。大多数这些工具都可以从 Windows NT 3.5 的 SDK 和 DDK 中应用&#xff08;您也可以临时处理 NT 3.51 的 DDK 文件&#xff0c;但之后根…

【Filament】材质系统

1 前言 本文主要介绍 Filament 的材质系统&#xff0c;官方介绍详见 → Filament Materials Guide。材质系统中会涉及到一些空间和变换的知识点&#xff0c;可以参考&#xff1a;【Unity3D】空间和变换、【Unity3D】Shader常量、变量、结构体、函数、【OpenGL ES】MVP矩阵变换、…

Nsis打包Unity Exe文件(通用)

Nsi 脚本 !include "MUI2.nsh"#使用现代UI Unicode true #使用Unicode !define EXENAME "exeName" #定义常量 exe名称 !define SHORTCUT "快捷方式名称" #定义桌面快捷方式的中文名称Name ${EXENAME} #安装程序的title OutFile "${EXENAME…

python/c++ Leetcode题解——2744. 最大字符串配对数目

方法一:两重循环枚举 思路与算法 我们可以直接使用二重循环,枚举给定的数组 words 中的 words[i] 和 words[j] 是否可以匹配。 由于题目规定了数组 words 中包含的字符串互不相同,因此在枚举时,只要保证 i<j,那么每个字符串最多匹配一次。 代码 C++: class Solut…

react-app框架——使用monaco editor实现online编辑html代码编辑器

文章目录 ⭐前言&#x1f496;react系列文章 ⭐配置monaco-editor&#x1f496;引入react-monaco-editor&#x1f496;引入react-app-rewired&#x1f496;通过config-overrides.js添加monaco插件配置 ⭐编辑代码的react页面配置&#x1f496;扩展 可自定义配置语言 ⭐效果⭐总…

嵌入式培训机构四个月实训课程笔记(完整版)-C++和QT编程第一天-C++概述和基础(物联技术666)

网盘链接:https://pan.baidu.com/s/1TKdHdeuDI8XPaakepvSLZQ?pwd=1688 提取码:1688 上午:C++概述 下午:C++基础 教学内容: 1、面向对象:程序=(对象+对象+…) 对象=(算法+数据结构) 2、类与对象: 对象是现实世界中的一个实体,其特征是: • 每一个对象必须…