力扣hot100 -- 动态规划(上)

目录

❄技巧

🌼爬楼梯

🍔杨辉三角

🌊打家劫舍

🐎完全平方数

🌼零钱兑换

🌼单词拆分


❄技巧

动态规划dp-CSDN博客

👆花 5 分钟快速刷一遍

花 10 分钟浏览一下 线性DP + 背包DP👇

30个题型+代码(冲刺2023蓝桥杯)(下)_挑战程序设计竞赛代码-CSDN博客

🌼爬楼梯

70. 爬楼梯 - 力扣(LeetCode)

/*
dp[i] : 爬到第 i 层的方法数
dp[i] = max(dp[i - 2] + dp[i - 1]) 每次爬 1 或 2 台阶
初始化 dp[0], dp[1]
前到后遍历
*/
class Solution {
public:int climbStairs(int n) {if (n <= 3)return n;int dp[n + 1];dp[0] = 1, dp[1] = 2;// 类似斐波那契for (int i = 2; i < n; ++i)dp[i] = dp[i - 1] + dp[i - 2];return dp[n - 1];}
};

🍔杨辉三角

118. 杨辉三角 - 力扣(LeetCode)

/*
dp[i][j] : 第 i 行, 第 j 列的数字
dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j]
观察可得:初始化 dp[i][0], dp[i][i] 左右边界的两条边 = 1
*/
class Solution {
public:vector<vector<int>> generate(int numRows) {vector<vector<int>> ans;int dp[31][31];for (int i = 0; i < numRows; ++i)dp[i][0] = 1, dp[i][i] = 1;ans.push_back({1});if(numRows >= 2)ans.push_back({1, 1});for (int i = 2; i < numRows; ++i) {vector<int> temp;temp.push_back(1);for (int j = 1; j < i; ++j) {dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];temp.push_back(dp[i][j]);}temp.push_back(1);ans.push_back(temp);}return ans;}
};

🌊打家劫舍

198. 打家劫舍 - 力扣(LeetCode)

/*
dp[i] : 只偷前 i 号房屋的最大值, i 从 0 开始
dp[i] = max(dp[i - 2] + nums[i], dp[i - 1])
初始化 : dp[0] = nums[0], dp[1] = max(nums[0], nums[1])
*/
class Solution {
public:int rob(vector<int>& nums) {int n = nums.size();int dp[101];if (n == 1) return nums[0];if (n == 2) return max(nums[0], nums[1]);dp[0] = nums[0], dp[1] = max(nums[0], nums[1]);for (int i = 2; i < n; ++i)dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);return dp[n - 1];}
};

🐎完全平方数

279. 完全平方数 - 力扣(LeetCode)

本题完全背包 -- 同 “零钱兑换”

01 背包,每个物品只选 1 个或不选;完全背包,每个物品可以选无数个

时间 O(n*\sqrt{n})

/*
dp[i] : 完全平方数的和为 i 的最少数量dp[i] = min(dp[i], dp[i - j*j] + dp[j*j])
即 dp[i] = min(dp[i], dp[i - j*j] + 1)
和为 i 的最小个数 = 
min(当前最大个数 dp[i], 和为 i - j*j 的最小个数 + 1)初始化 : dp[i] = 1+1+1+... = i 取最大值
*/
class Solution {
public:int numSquares(int n) {int dp[10001];dp[0] = 0; // 防止 dp[16 - 4*4] 没有for (int i = 1; i <= n; ++i) {dp[i] = i; // 初始化最大值for (int j = 1; j*j <= i; ++j)dp[i] = min(dp[i], dp[i - j*j] + 1);}return dp[n];}
};// 0 1 2 3 4 5 6 7 8 9(初始化)

🌼零钱兑换

322. 零钱兑换 - 力扣(LeetCode)

完全背包,同上一题 “完全平方数” 

auto x : 数组,不会改变原数组的值,只能遍历,无法改变原数组的值

改变原数组的值直接数组访问 a[i]

时间 O(Sn),S是 amount,n 是 coins 数量 

/*
dp[i] : 金额总和为 i 的最少数量
dp[i] = min(dp[i], dp[i - coins[j]] + 1)
初始化 :  dp[0] = 0
*/
class Solution {
public:int coinChange(vector<int>& coins, int amount) {int dp[amount + 10];for (int i = 1; i <= amount; ++i)dp[i] = amount + 1; // 初始化最大值dp[0] = 0; for (int i = 1; i <= amount; ++i)for (int j = 0; j < coins.size(); ++j)if (i >= coins[j])dp[i] = min(dp[i], dp[i - coins[j]] + 1);return dp[amount] == amount + 1 ? -1 : dp[amount];}
};

🌼单词拆分

139. 单词拆分 - 力扣(LeetCode)

注意,s.substr(i, j) 表示下标 i 开始,连续的 j 个字符

时间 O(n^2)

/*
dp[i] : s 的前 i 位是否可以用 wordDict 中的字符串表示
dp[i] = dp[j] && hash.find(s.substr(j, i - j)) != hash.end()
解释:前 j 位可以找到,且 [j, i] 能用 wordDict 中字符串表示
初始化 : dp[0] = true
*/
class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {int n = s.size();// 转化为哈希表,便于查找unordered_set<string> hash(wordDict.begin(), wordDict.end());vector<bool> dp(n + 1, false);dp[0] = true;for (int i = 1; i <= n; ++i) // 前 i 位(1开始)for (int j = 0; j < i; ++j) // 左边界if (dp[j] && hash.find(s.substr(j, i-j)) != hash.end() ) {dp[i] = true;break;}return dp[n];}
};

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

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

相关文章

VS展示6个错误中的0个解决方法

左键点击展示6个错误中的0个 左键点击展示23个警告中的0个

国产强大免费WAF, 社区版雷池动态防护介绍

雷池WAF&#xff0c;基于智能语义分析的下一代 Web 应用防火墙 使用情况 我司于2023年4月23日对雷池进行测试&#xff0c;测试一个月后&#xff0c;于2023年5月24日对雷池进行正式切换&#xff0c;此时版本为1.5.1。 里程碑纪念 后续一直跟随雷池进行版本升级&#xff0c;当前…

怎样使用js技术实现Chrome投屏功能?

在Web前端技术中&#xff0c;直接控制浏览器窗口或标签页从主屏投屏到副屏&#xff08;如PPT的演讲者模式&#xff09;并不简单&#xff0c;而且直接控制浏览器窗口从主屏投屏到副屏的功能超出了Web标准的范畴&#xff0c;并且涉及到用户系统级别的设置和权限&#xff0c;因此不…

ETCD概述--使用/特性/架构/原理

ETCD概述 ETCD是一个高度一致的分布式键值存储, 它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据(高可用, 强一致性)​全局的配置服务中心. 本文将介绍其特性、相关操作和常见的应用场景. 如果想了解更多, 请查阅我的技术博客: https://dingyuqi.com 特性 …

C语言分支和循环(下)

C语言分支和循环&#xff08;下&#xff09; 1. 随机数生成1.1 rand1.2 srand1.3 time1.4 设置随机数的范围 2. 猜数字游戏实现 掌握了前面学习的这些知识&#xff0c;我们就可以写⼀些稍微有趣的代码了&#xff0c;比如&#xff1a; 写⼀个猜数字游戏 游戏要求&#xff1a; 电…

git常用命令速查表

Git相关概念简述 版本库&#xff1a;git在本地开辟的一个存储空间&#xff0c;一般在 .git 文件里。工作区(workspace)&#xff1a; 就是编辑器里面的代码&#xff0c;我们平常开发直接操作的就是工作区。暂存区&#xff08;index/stage&#xff09;&#xff1a;暂时存放文件的…

13. Revit API: Filter(过滤器)

13. Revit API: Filter&#xff08;过滤器&#xff09; 前言 在讲Selection之前&#xff0c;还是有必要先了解一下的过滤器的。 对了&#xff0c;关于查找一些比较偏的功能或者API的用法&#xff0c;可以这样查找 关键词 site:https://thebuildingcoder.typepad.com/ site是…

C语言 -- 函数

C语言 -- 函数 1. 函数的概念2. 库函数2.1 标准库和头文件2.2 库函数的使用方法2.2.1 功能2.2.2 头文件包含2.2.3 实践2.2.4 库函数文档的一般格式 3. 自定义函数3.1 函数的语法形式3.2 函数的举例 4. 形参和实参4.1 实参4.2 形参4.3 实参和形参的关系 5. return 语句6. 数组做…

react ts 封装3D柱状图,支持渐变

留档&#xff0c;以防忘记 bar3D.tsx import React, { useEffect, useRef, useState } from react; import * as echarts from echarts; import echarts/lib/chart/bar; import echarts/lib/chart/pictorialBar; import echarts/lib/component/grid; import echarts/lib/comp…

Centos7 安装老版本的chrome

查看自己linux是哪个centos版本 使用以下命令&#xff1a; cat /etc/centos-release我这里是centOS 7。然后在安装最新版的google-chrome时&#xff0c;总是会报错显示存在依赖环境的问题&#xff0c;使得无法安装成功chrome。 Package: google-chrome-stable (/google-chro…

使用 Rustup 管理 Rust 版本

文章目录 安装 Rustup配置镜像源安装 Rustup 安装 RustVS Code插件创建项目代码示例 Rust 官网&#xff1a;https://www.rust-lang.org/zh-CN/Crates 包管理&#xff1a;https://crates.io/Rust 程序设计语言&#xff1a;https://kaisery.github.io/trpl-zh-cn/通过例子学 Rust…

如何对低代码平台进行分类?

现在市面上的低代码平台就像雨后春笋一样冒出来&#xff0c;而且源源不绝&#xff0c;但总结下来&#xff0c;大致的也就以下三类。 一、 aPaaS多引擎类&#xff08;有很多成熟引擎、做好东西要一起用&#xff09; 这类产品包括&#xff1a;织信Informat&#xff08;国内&…

使用 Smart-doc 记录 Spring REST API

如果您正在使用 Spring Boot 开发 RESTful API&#xff0c;您希望让其他开发人员尽可能容易地理解和使用您的 API。文档是必不可少的&#xff0c;因为它为将来的更新提供了参考&#xff0c;并帮助其他开发人员与您的 API 集成。很长一段时间以来&#xff0c;记录 REST API 的方…

uni-app上传失败超出文件限制解决方法-分包处理-预加载

分包背景 当你的上传出现一下错误&#xff1a; Error: 系统错误&#xff0c;错误码&#xff1a;80051,source size 2089KB exceed max limit 2MB [20240703 10:53:06][wxbf93dfb6cb3eb8af] [1.06.2405010][win32-x64] 说明你主包太大需要处理了&#xff0c;一下两种方法可以…

REGX52.H报错

keil cannot open source input file "REGX52.H": No such file or directory 选择下面这个目录 Keil\C51\INC\Atmel

SpringCloudAlibaba基础四 微服务调用组件OpenFeign

JAVA 项目中如何实现接口调用&#xff1f; 1&#xff09;Httpclient HttpClient 是 Apache Jakarta Common 下的子项目&#xff0c;用来提供高效的、最新的、功能丰富的支持 Http 协议的客户端编程工具包&#xff0c;并且它支持 HTTP 协议最新版本和建议。HttpClient 相比传统 …

C语言中的文件操作

1. 为什么使⽤⽂件 如果没有文件&#xff0c;我们写的程序的数据是存储在电脑内存中的&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;要将数据进行持久化的保存&#xff0c;我们可以使用文件。 2. 什么是⽂件 磁盘&#xff08;硬盘&#…

springboot双学位招生管理系统-计算机毕业设计源码93054

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…

golang写的自动更新器

文件自动更新器&#xff0c;这个很多端游和软件都有用到的。 golang的rpc通信&#xff0c;是非常好用的一个东西&#xff0c;可以跟调用本地函数一样&#xff0c;调用远程服务端的函数&#xff0c;直接从远程服务端上拉取数据下来&#xff0c;简单便捷。 唯一的遗憾就是&#x…

(九)绘制彩色三角形

前面的学习中并未涉及到颜色&#xff0c;现在打算写一个例子&#xff0c;在顶点着色器和片元着色器中加入颜色&#xff0c;绘制有颜色的三角形。 #include <glad/glad.h>//glad必须在glfw头文件之前包含 #include <GLFW/glfw3.h> #include <iostream>void …