当前位置: 首页 > news >正文

【LeetCode 热题 100】打家劫舍 / 零钱兑换 / 单词拆分 / 乘积最大子数组 / 最长有效括号

头像
⭐️个人主页:@小羊
⭐️所属专栏:LeetCode 热题 100
很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~

动图描述

目录

      • 爬楼梯
      • 杨辉三角
      • 打家劫舍
      • 完全平方数
      • 零钱兑换
      • 单词拆分
      • 最长递增子序列
      • 最大子数组和
      • 乘积最大子数组
      • 分割等和子集
      • 最长有效括号


爬楼梯

  • 爬楼梯

在这里插入图片描述

class Solution {
public:int climbStairs(int n) {int a = 0, b = 0, c = 1;for (int i = 1; i <= n; i++){a = b;b = c;c = a + b;}return c;}
};

杨辉三角

  • 杨辉三角

在这里插入图片描述

class Solution {
public:vector<vector<int>> generate(int numRows) {vector<vector<int>> res(numRows);for (int i = 0; i < numRows; i++){res[i].resize(i + 1, 1);for (int j = 1; j < i; j++){res[i][j] = res[i - 1][j - 1] + res[i - 1][j];}}return res;}
};

打家劫舍

  • 打家劫舍

在这里插入图片描述

class Solution {
public:int rob(vector<int>& nums) {int n = nums.size();vector<int> f(n), g(n);f[0] = nums[0];for (int i = 1; i < n; i++){f[i] = g[i - 1] + nums[i];g[i] = max(g[i - 1], f[i - 1]);}return max(f[n - 1], g[n - 1]);}
};

完全平方数

  • 完全平方数

在这里插入图片描述

这是一个完全背包问题。

class Solution {
public:int numSquares(int n) {int m = sqrt(n);vector<int> dp(n + 1, 0x3f3f3f3f);dp[0] = 0;for (int i = 1; i <= m; i++){for (int j = i * i; j <= n; j++){dp[j] = min(dp[j], dp[j - i * i] + 1);}}return dp[n];}
};

零钱兑换

  • 零钱兑换

在这里插入图片描述

class Solution {
public:int coinChange(vector<int>& coins, int amount) {const int N = 0x3f3f3f3f;vector<int> dp(amount + 1, N);dp[0] = 0;for (int i = 0; i < coins.size(); i++){for (int j = coins[i]; j <= amount; j++){dp[j] = min(dp[j], dp[j - coins[i]] + 1);}}return dp[amount] >= N ? -1 : dp[amount];}
};

单词拆分

  • 单词拆分

在这里插入图片描述

class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> hashset(wordDict.begin(), wordDict.end());int n = s.size();s = ' ' + s;vector<bool> dp(n + 1);dp[0] = true;for (int i = 1; i <= n; i++){for (int j = 1; j <= i; j++){if (dp[j - 1] && hashset.count(s.substr(j, i - j + 1))){dp[i] = true;break;}}}return dp[n];}
};

最长递增子序列

  • 最长递增子序列

在这里插入图片描述

class Solution {
public:int lengthOfLIS(vector<int>& nums) {int n = nums.size();vector<int> dp(n, 1);int res = 1;for (int i = 1; i < n; i++){for (int j = 0; j < i; j++){if (nums[j] < nums[i])dp[i] = max(dp[i], dp[j] + 1);res = max(res, dp[i]);}}return res;}
};

贪心解法。

class Solution {
public:int lengthOfLIS(vector<int>& nums) {int n = nums.size();vector<int> v;for (auto e : nums){if (v.empty() || e > v.back()) v.push_back(e);else{int l = 0, r = v.size() - 1;while (l < r){int mid = (r + l) / 2;if (v[mid] < e) l = mid + 1;else r = mid;}v[l] = e;}}return v.size();}
};

最大子数组和

  • 最大子数组和

在这里插入图片描述

dp[i] 表示以 i 位置为结尾的所有连续子数组的最大和。

class Solution {
public:int maxSubArray(vector<int>& nums) {int n = nums.size();vector<int> dp(n + 1);int res = -0x3f3f3f3f;for (int i = 1; i <= n; i++){dp[i] = max(dp[i - 1], 0) + nums[i - 1];res = max(res, dp[i]);}return res;}
};
class Solution {
public:int maxSubArray(vector<int>& nums) {int pre = 0, res = -0x3f3f3f3f;for (auto e : nums){pre = (pre, 0) + e;res = max(res, pre);}return res;}
};

乘积最大子数组

  • 乘积最大子数组

在这里插入图片描述

class Solution {
public:int maxProduct(vector<int>& nums) {int n = nums.size(), res = -0x3f3f3f3f;vector<int> f(n + 1, 1), g(n + 1, 1);for (int i = 1; i <= n; i++){int x = nums[i - 1];int y = x * f[i - 1], z = x * g[i - 1];f[i] = max(x, max(y, z));g[i] = min(x, min(y, z));res = max(res, f[i]);}return res;}
};

分割等和子集

  • 分割等和子集

在这里插入图片描述

class Solution {
public:bool canPartition(vector<int>& nums) {int sum = 0;for (auto e : nums) sum += e;if (sum % 2) return false;sum /= 2;vector<bool> dp(sum + 1);dp[0] = true;for (int i = 0; i < nums.size(); i++){for (int j = sum; j >= nums[i]; j--){dp[j] = dp[j] || dp[j - nums[i]];}}return dp[sum];}
};

最长有效括号

  • 最长有效括号

在这里插入图片描述

初始化 -1 处理第一个字符就是 ) 的情况,避免栈操作错误。
栈中存储未匹配的 下标或无效 下标。

class Solution {
public:int longestValidParentheses(string s) {stack<int> st;st.push(-1);int len = 0;for (int i = 0; i < s.size(); i++){if (s[i] == '(') st.push(i);else{st.pop();if (st.empty()) st.push(i);else len = max(len, i - st.top());}}return len;}
};

本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦~

头像
http://www.xdnf.cn/news/667477.html

相关文章:

  • DAY38打卡
  • Python打卡第38天
  • 零基础远程连接课题组Linux服务器,安装anaconda,配置python环境(换源),在服务器上运行python代码【2/3 适合小白,步骤详细!!!】
  • K8S Pod调度方法实例
  • 详解K8s API Server 如何处理请求的?
  • MySQL connection close 后, mysql server上的行为是什么
  • 【Elasticsearch】调用_flush api会调用_refresh 吗?
  • 火山引擎声音复刻
  • 安全生产例题
  • 知识图谱:AI时代语义认知的底层重构逻辑
  • 游戏引擎学习第314天:将精灵拆分成多个层
  • U 盘数据恢复全攻略
  • 说说 Kotlin 中的 Any 与 Java 中的 Object 有何异同?
  • Go 应用中的 Redis 连接与操作
  • NLua性能对比:C#注册函数 vs 纯Lua实现
  • Nginx--手写脚本压缩和切分日志(也适用于docker)
  • 【Linux】进程状态优先级
  • 【QT】在QT6中读取文件的方法
  • 私服 nexus 之间迁移 npm 仓库
  • Debian 11之解决daemon.log与syslog文件占用空间过大问题
  • pyspark实践
  • [yolov11改进系列]基于yolov11引入感受野注意力卷积RFAConv的python源码+训练源码
  • 手机收不到WiFi,手动输入WiFi名称进行连接不不行,可能是WiFi频道设置不对
  • Matlab实现LSTM-SVM时间序列预测,作者:机器学习之心
  • 链表:数据结构的灵动舞者
  • Linux系统-基本指令(3)
  • 智能体赋能效率,企业知识库沉淀价值:UMI企业智脑的双轮驱动!
  • 【Quest开发】空间音频的使用
  • [AI]大模型MCP快速入门及智能体执行模式介绍
  • HJ25 数据分类处理【牛客网】