前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【LeetCode 热题 100】打家劫舍 / 零钱兑换 / 单词拆分 / 乘积最大子数组 / 最长有效括号

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

作者头像
_小羊_
发布2025-06-13 10:27:29
发布2025-06-13 10:27:29
3200
代码可运行
举报
文章被收录于专栏:C++C++
运行总次数:0
代码可运行
爬楼梯

代码语言:javascript
代码运行次数:0
运行
复制
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;
    }
};

杨辉三角

代码语言:javascript
代码运行次数:0
运行
复制
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;
    }
};

打家劫舍

代码语言:javascript
代码运行次数:0
运行
复制
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]);
    }
};

完全平方数

这是一个完全背包问题。

代码语言:javascript
代码运行次数:0
运行
复制
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];
    }
};

零钱兑换

代码语言:javascript
代码运行次数:0
运行
复制
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];
    }
};

单词拆分

代码语言:javascript
代码运行次数:0
运行
复制
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];
    }
};

最长递增子序列

代码语言:javascript
代码运行次数:0
运行
复制
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;
    }
};

贪心解法。

代码语言:javascript
代码运行次数:0
运行
复制
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 位置为结尾的所有连续子数组的最大和。

代码语言:javascript
代码运行次数:0
运行
复制
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;
    }
};
代码语言:javascript
代码运行次数:0
运行
复制
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;
    }
};

乘积最大子数组

代码语言:javascript
代码运行次数:0
运行
复制
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;
    }
};

分割等和子集

代码语言:javascript
代码运行次数:0
运行
复制
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 处理第一个字符就是 ) 的情况,避免栈操作错误。 栈中存储未匹配的 下标或无效 下标。

代码语言:javascript
代码运行次数:0
运行
复制
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;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 爬楼梯
  • 杨辉三角
  • 打家劫舍
  • 完全平方数
  • 零钱兑换
  • 单词拆分
  • 最长递增子序列
  • 最大子数组和
  • 乘积最大子数组
  • 分割等和子集
  • 最长有效括号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档