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

news2024/11/27 14:46:11

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) {
        //判断是否是 1
        if (isSquare(n)) {
            return 1;
        }
        
        //判断是否是 4
        int temp = n;
        while (temp % 4 == 0) {
            temp /= 4;
        }
        if (temp % 8 == 7) {
            return 4;
        }

        //判断是否是 2
        for (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.coloradmin.cn/o/1393014.html

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

相关文章

STM32F103标准外设库——中断应用/事件控制器(六)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

CSS 之 跑马灯边框

一、简介 ​ 之前有做过渐变色边框的样式&#xff0c;然后某天刷抖&#x1f3b5;&#xff0c;看到某个老师在讲跑马灯的样式效果&#xff0c;于是就自己尝试实现一下跑马灯样式的边框&#xff0c;虽然这种样式并不常见&#xff08;基本没卵用&#xff09;&#xff0c;其使用场…

手机崩溃日志的查找与分析

手机崩溃日志的查找与分析 摘要 本文介绍了一款名为克魔助手的iOS应用日志查看工具&#xff0c;该工具可以方便地查看iPhone设备上应用和系统运行时的实时日志和崩溃日志。同时还提供了崩溃日志的分析查看模块&#xff0c;可以对苹果崩溃日志进行符号化、格式化和分析&#x…

CMake+QT+大漠插件的桌面应用开发(QThread)

文章目录 CMakeQT大漠插件的桌面应用开发&#xff08;QThread&#xff09;简介环境项目结构配置编译环境代码 CMakeQT大漠插件的桌面应用开发&#xff08;QThread&#xff09; 简介 在CMakeQT大漠插件的桌面应用开发中已经给出了QT配合大漠插件开发桌面应用的样例 不过由于主…

Android车载系统Car模块架构链路分析

一、模块主要成员 CarServiceHelperService SystemServer 中专门为 AAOS 设立的系统服务&#xff0c;用来管理车机的核心服务 CarService。该系统服务的具体实现在 CarServiceHelperServiceUpdatableImpl CarService Car模块核心服务APP&#xff0c;Android 13版本开始分为…

PXE和kickstart无人值守安装

PXE高效批量网络装机 引言 1.系统装机的引导方式 启动 操作 系统 1.硬盘 2.光驱&#xff08;u盘&#xff09; 3.网络启动 pxe 重装系统&#xff1f; 在已有操作系统 新到货了一台服务器&#xff0c; 装操作系统 系统镜像 u盘 光盘 pe&#xff1a; 小型的 操作系统 在操…

RocketMQ Dashboard 详解

RocketMQ Dashboard 是 RocketMQ 的管控利器&#xff0c;为用户提供客户端和应用程序的各种事件、性能的统计信息&#xff0c;支持以可视化工具代替 Topic 配置、Broker 管理等命令行操作。 一、介绍​ 功能概览​ 面板功能运维修改nameserver 地址; 选用 VIPChannel驾驶舱查…

【Docker】网络模式详解及容器间网络通信

目录 一、概述 二、默认网络 三、网络模式及应用 1. Bridge模式 2. Host模式 3. none网络模式 四、自定义网络应用 1. 网络相连 2. 自定义通讯 3. 自定义IP 每篇一获 一、概述 在 Docker 中&#xff0c;网络设置包括 IP 地址、子网掩码、网关、DNS 和端口号等关键组…

循环神经网络的变体模型-LSTM、GRU

一.LSTM&#xff08;长短时记忆网络&#xff09; 1.1基本介绍 长短时记忆网络&#xff08;Long Short-Term Memory&#xff0c;LSTM&#xff09;是一种深度学习模型&#xff0c;属于循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;的一种变体。…

数据结构学习之链式栈应用的案例(最小栈)

实例要求&#xff1a; 设计一个支持入栈、出栈、取栈顶元素等操作&#xff0c;并能在常数时间内检索到最小元素的栈&#xff1b; 实现 MinStack 类: MinStack* minStackCreate() 初始化堆栈对象&#xff0c;即建栈&#xff1b; void minStackPush(MinStack* obj, int val) …

springmvc上传与下载

文件上传 结构图 导入依赖 <dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>org.springframework</groupId><artifactId…

机器学习之常用激活函数

人工神经网络中最基本的单元叫神经元,又叫感知器,它是模拟人脑神经系统的神经元(分析和记忆)、树突(感知)、轴突(传导)的工作原理,借助计算机的快速计算和存储来实现。它的主体结构如下: 激活函数常用类型有:线性激活函数、符号激活函数、Sigmoid激活函数、tanh激活…

MySQL中根据出生日期计算年龄

创建student表 mysql> create table student( -> sid int primary key comment 学生号, -> sname varchar(20) comm…

mybatis----小细节

1、起别名 在MyBatis中&#xff0c;<typeAliases>元素用于定义类型别名&#xff0c;它可以将Java类名映射为一个更简短的别名&#xff0c;这样在映射文件中可以直接使用别名而不需要完整的类名。 下面是一个示例&#xff1a; 在mybatis核心配置文件中配置typeAliases标…

QT第二周周三

题目&#xff1a;使用图片绘制出仪表盘 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *paren…

社交媒体数据分析:解读Facebook用户行为

在当今数字化时代&#xff0c;社交媒体已经成为人们生活不可或缺的一部分&#xff0c;而Facebook作为这个领域的巨头&#xff0c;承载了数十亿用户的社交活动。这庞大的用户群体产生了海量的数据&#xff0c;通过深度数据分析&#xff0c;我们能够深入解读用户行为&#xff0c;…

用C++和Python分别实现归并排序(详细讲解!!!)

目录 一、归并排序的背景1. 分治算法2. 分治算法的解题步骤2.1 分解2.2 治理2.3 合并 2. 归并排序2.1 大致思路2.2 算法分析 二、C代码三、Python代码 一、归并排序的背景 1. 分治算法 归并排序&#xff0c;本质上就是分治算法的一种&#xff0c;那么什么是分治算法呢。在算法…

【Java】HttpServlet类简单方法和请求显示

1、HttpServlet类简介&#x1f340; Servlet类中常见的三个类有&#xff1a;☑️HttpServlet类&#xff0c;☑️HttpServletRequest类&#xff0c;☑️HttpResponse类 &#x1f42c;其中&#xff0c;HttpServlet首先必须读取Http请求的内容。Servlet容器负责创建HttpServlet对…

F. Sum of Progression

题面 输入 每个测试由几个测试用例组成。第一行包含一个整数 t&#xff08;1 ≤ t ≤ 1e4&#xff09;——测试用例的数量。接下来的几行包含测试用例的描述。 每个测试用例的第一行包含两个数字n&#xff0c;q&#xff08;1 ≤ n ≤ 1e5&#xff0c;1 ≤ q ≤ 2e5&#xff09;…

电子雨html代码

废话不多说下面是代码&#xff1a; <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><title>Code</title><style>body{margin: 0;overflow: hidden;}</style></head><body><c…