2026-10-21学习笔记

完全平方数

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

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

示例 1:

**输入:**n = 12

**输出:**3

解释: 12 = 4 + 4 + 4

思路:动态规划

  1. 状态定义 :dp[i] 表示凑成和为 i 的最少完全平方数数量。

  2. 初始化 :dp[0] = 0,其余初始化为一个较大值(如 Integer.MAX_VALUE 或 n),因为要求最小值。

  3. 状态转移方程 :

    对于每个和 i,我们可以遍历所有小于等于 i 的完全平方数 j * j:

    dpi=min⁡(dpi,dpi−j∗j+1)

    意思是:凑成 i 的最少数量,等于凑成 i - j*j 的最少数量加上当前这个平方数 j*j(数量 +1)。

  4. 返回值 :dp[n]。

class Solution {

public int numSquares(int n) {

int\[\] dp=new intn+1;

for(int i=1;i<=n;i++){

dpi=i;

}

dp0=0;

for(int i=1;i<=n;i++)

for(int j=1;j*j<=n;j++){

if(i>=j*j)

dpi=Math.min(dpi,dpi-j\*j+1);

}

return dpn;

}

}

打家劫舍

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

示例 1:

输入: 1,2,3,1

**输出:**4

**解释:**偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。

偷窃到的最高金额 = 1 + 3 = 4 。

class Solution {

public int rob(int\[\] nums) {

int n=nums.length;

int\[\] dp=new intn;

dp0=nums0;

if(n>=2)dp1=Math.max(nums0,nums1);

for(int i=2;i<=n-1;i++){

dpi=Math.max(dpi-1,dpi-2+numsi);

}

return dpn-1;

}

}

最小栈

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。可以使用Deque

实现 MinStack 类:

  • MinStack() 初始化堆栈对象。
  • void push(int value) 将元素 value 推入堆栈。
  • void pop() 删除堆栈顶部的元素。
  • int top() 获取堆栈顶部的元素。
  • int getMin() 获取堆栈中的最小元素。

思路:维护一个数据栈,正常进行push,pop,top

维护一个最小栈,动态存储每一轮数据栈中的最小值

push:对于数据栈,value来了直接push,对于最小栈,如果最小栈为空或者当前value小于等于最小栈的栈顶,则将value也push进最小栈

pop:数据栈直接pop,pop时比较当前pop出去的值和当前最小栈顶的值,如果相等,要把最小栈顶的值也pop出去,进行状态的管理

class MinStack {

private Deque datastack;

private Deque minstack;

public MinStack() {

this.datastack=new ArrayDeque<>();

this.minstack=new ArrayDeque<>();

}

public void push(int value) {

datastack.push(value);

if(minstack.isEmpty()||value<=minstack.peek()){

minstack.push(value);

}

}

public void pop() {

if(datastack.pop().equals(minstack.peek())){

minstack.pop();

}

}

public int top() {

return datastack.peek();

}

public int getMin() {

return minstack.peek();

}

}

/**

* Your MinStack object will be instantiated and called as such:

* MinStack obj = new MinStack();

* obj.push(value);

* obj.pop();

* int param_3 = obj.top();

* int param_4 = obj.getMin();

*/

相关推荐
叼烟扛炮28 分钟前
Linux 学习笔记(三):文件管理与文本查看
linux·笔记·学习
动词ing29 分钟前
【学习笔记】51单片机 点亮一个LED灯
笔记·学习·51单片机
zhangrelay30 分钟前
手机十周年以上长期稳定测试意义不大正常非暴力使用电池健康都在七成以上
笔记·学习·智能手机
乐橙开放平台36 分钟前
门店监控想集中看?乐橙含光支持多品牌摄像头跨店管理
网络·笔记·物联网·自动化·音视频·智能家居
Dxy123931021640 分钟前
ShardingSphere 自定义分片算法:BINARY(16) UUIDv7 哈希分片实现
算法·哈希算法
深圳老胡42 分钟前
STM32C5A3ZG开发板网络接口配置流程详解
笔记·stm32·单片机·代码规范
Z21-X44 分钟前
云原生运维学习笔记:存储、网络与操作系统——云计算的底层基石
运维·笔记·学习·云原生
深圳老胡1 小时前
STM32C5A3ZG 开发板调试笔记:USB 复用 ST-Link 与工程生成警告说明
笔记·stm32·单片机·代码规范
职豚求职小程序3 小时前
易方达基金27秋招笔试|场次+考情全梳理
笔记