《LeetCode 顺序刷题》31 - 40
31、[中等] 下一个排列数组双指针class Solution { public: void nextPermutation(vectorint nums) { int i nums.size() - 2; while (i 0 nums[i] nums[i 1]) i--; if (i 0) { int j nums.size() - 1; while (j 0 nums[i] nums[j]) j--; swap(nums[i], nums[j]); } reverse(nums.begin() i 1, nums.end()); } };32、[困难] 最长有效括号栈字符串动态规划动态规划class Solution { public: int longestValidParentheses(string s) { int ret 0; int n s.size(); vectorint dp(n, 0); for (int i 1; i n; i) { if (s[i] )) { if (s[i - 1] () { dp[i] (i 2 ? dp[i - 2] : 0) 2; } else if (i - dp[i - 1] 0 s[i - dp[i - 1] - 1] () { dp[i] dp[i - 1] ((i - dp[i - 1]) 2 ? dp[i - dp[i - 1] - 2] : 0) 2; } ret max(ret, dp[i]); } } return ret; } };栈class Solution { public: int longestValidParentheses(string s) { int ret 0; stackint stk; stk.push(-1); for (int i 0; i s.size(); i) { if (s[i] () { stk.push(i); } else { stk.pop(); if (stk.empty()) { stk.push(i); } else { ret max(ret, i - stk.top()); } } } return ret; } };不需要额外的空间class Solution { public: int longestValidParentheses(string s) { int left 0, right 0, maxlength 0; for (int i 0; i s.size(); i) { if (s[i] () { left; } else { right; } if (left right) { maxlength max(maxlength, 2 * right); } else if (right left) { left right 0; } } left right 0; for (int i (int)s.size() - 1; i 0; i--) { if (s[i] () { left; } else { right; } if (left right) { maxlength max(maxlength, 2 * left); } else if (left right) { left right 0; } } return maxlength; } };33、[中等] 搜索旋转排序数组二分查找class Solution { public: int search(vectorint nums, int target) { int n nums.size(); if (!n) { return -1; } if (n 1) { return nums[0] target ? 0 : -1; } int left 0, right n - 1; while (left right) { int mid (right left) / 2; if (nums[mid] target) { return mid; } if (nums[0] nums[mid]) { if (nums[0] target target nums[mid]) { right mid - 1; } else { left mid 1; } } else { if (nums[mid] target target nums[n - 1]) { left mid 1; } else { right mid - 1; } } } return -1; } };34、[中等] 在排序数组中查找元素的第一个和最后一个二分查找class Solution { public: vectorint searchRange(vectorint nums, int target) { if (nums.size() 0) { return {-1, -1}; } int left 0, right nums.size() - 1; int begin 0, end 0; // 二分左端点 while (left right) { int mid left (right - left) / 2; if (nums[mid] target) { left mid 1; } else { right mid; } } // 判断结果 if (nums[right] ! target) { return {-1, -1}; } else { begin left; } // 二分右端点 left 0; right nums.size() - 1; while (left right) { int mid left (right - left 1) / 2; if (nums[mid] target) { right mid - 1; } else { left mid; } } end left; return {begin, end}; } };35、[简单] 搜索插入位置二分查找数组class Solution { public: int searchInsert(vectorint nums, int target) { int left 0, right nums.size() - 1; if (nums[right] target) return right 1; while (left right) { int mid left (right - left) / 2; if (nums[mid] target) left mid 1; else right mid; } return left; } };36、[中等] 有效的数独数组哈希表矩阵class Solution { public: bool isValidSudoku(vectorvectorchar board) { bool row[9][10]; bool col[9][10]; bool grid[3][3][10]; for (int i 0; i 9; i) { for (int j 0; j 9; j) { if (board[i][j] ! .) { int num board[i][j] - 0; // 是否是有效的 if (row[i][num] || col[j][num] || grid[i / 3][j / 3][num]) { return false; } row[i][num] col[j][num] grid[i / 3][j / 3][num] true; } } } return true; } };37、[困难] 解数独位运算数组回溯矩阵class Solution { private: bool row[9][10]; bool col[9][10]; bool grid[3][3][10]; bool dfs(vectorvectorchar board) { for (int i 0; i 9; i) { for (int j 0; j 9; j) { if (board[i][j] .) { // 填数 for (int num 1; num 9; num) { if (!row[i][num] !col[j][num] !grid[i / 3][j / 3][num]) { board[i][j] 0 num; row[i][num] col[j][num] grid[i / 3][j / 3][num] true; if (dfs(board) true) { return true; } // 恢复现场 board[i][j] .; row[i][num] col[j][num] grid[i / 3][j / 3][num] false; } } return false; } } } return true; } public: void solveSudoku(vectorvectorchar board) { // 初始化 for (int i 0; i 9; i) { for (int j 0; j 9; j) { if (board[i][j] ! .) { int num board[i][j] - 0; row[i][num] col[j][num] grid[i / 3][j / 3][num] true; } } } dfs(board); } };38、[中等] 外观数列字符串class Solution { public: string countAndSay(int n) { string ret 1; for (int i 1; i n; i) { string tmp; int len ret.size(); for (int left 0, right 0; right len;) { while (right len ret[left] ret[right]) { right; } tmp to_string(right - left) ret[left]; left right; } ret tmp; } return ret; } };39、[中等] 组合总和数组回溯class Solution { private: vectorvectorint ret; vectorint path; public: vectorvectorint combinationSum(vectorint candidates, int target) { dfs(candidates, 0, target); return ret; } void dfs(vectorint candidates, int pos, int target) { if (target 0) { ret.push_back(path); return; } if (target 0) { return; } for (int i pos; i candidates.size(); i) { path.push_back(candidates[i]); dfs(candidates, i, target - candidates[i]); path.pop_back(); } } };class Solution { public: vectorvectorint combinationSum(vectorint candidates, int target) { vectorvectorint solutions; vectorint solution; int curSum 0; dfs(solutions, solution, curSum, 0, target, candidates); return solutions; } void dfs(vectorvectorint solutions, vectorint solution, int curSum, int preIdx, int target, vectorint candidates) { if (curSum target) { if (curSum target) { // 保存当前组合 solutions.push_back(solution); } return; } // 从后选一个数字累加 for (int i preIdx; i candidates.size(); i) { solution.push_back(candidates[i]); dfs(solutions, solution, curSum candidates[i], i, target, candidates); // 回溯 solution.pop_back(); } } };40、[中等] 组合总和 Ⅱ数组回溯class Solution { private: vectorpairint, int freq; vectorvectorint ret; vectorint path; public: vectorvectorint combinationSum2(vectorint candidates, int target) { sort(candidates.begin(), candidates.end()); for (int num : candidates) { if (freq.empty() || num ! freq.back().first) { freq.emplace_back(num, 1); } else { freq.back().second; } } dfs(0, target); return ret; } void dfs(int pos, int target) { if (target 0) { ret.push_back(path); return; } if (pos freq.size() || target freq[pos].first) { return; } dfs(pos 1, target); int most min(target / freq[pos].first, freq[pos].second); for (int i 1; i most; i) { path.push_back(freq[pos].first); dfs(pos 1, target - i * freq[pos].first); } for (int i 1; i most; i) { path.pop_back(); } } };

相关新闻

▲DQPSK调制解调+扩频解扩通信链路matlab误码率仿真

▲DQPSK调制解调+扩频解扩通信链路matlab误码率仿真

1.本系统整体构架 整个程序,我们采用如下的流程图实现: 2.各个模块基本原理 2.1 DQPSK调制解调

2026/7/6 7:31:46 阅读更多 →
基于微信小程序的博物馆文创系统小程序设计与实现

基于微信小程序的博物馆文创系统小程序设计与实现

文末获取联系 开发语言:Java 使用框架:spring boot 前端技术:JavaScript、Vue.js 、css 开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库:MySQL 5.7/8.0 数据库管理工具:Navicat JDK版本&…

2026/7/6 4:28:58 阅读更多 →
当达尔文遇上芯片设计:用进化算法“培育”最优Verilog代码

当达尔文遇上芯片设计:用进化算法“培育”最优Verilog代码

让大语言模型学会“物竞天择,适者生存”的硬件优化之道 如果你告诉一个芯片设计师,未来可以用“养花种草”的方式“培育”出最优的硬件代码,他可能会觉得你在开玩笑。但今天,这个看似荒诞的想法正在成为现实——进化算法与大语言模型的结合,正在重新定义Verilog代码生成与…

2026/7/3 1:14:03 阅读更多 →

最新新闻

CryptoJS前端加密实战指南:从AES到SHA-256的完整应用

CryptoJS前端加密实战指南:从AES到SHA-256的完整应用

1. 项目概述:为什么你需要一个JavaScript加密库?如果你正在开发一个Web应用,无论是处理用户密码、保护API通信,还是在前端对敏感数据进行预处理,加密都是一个绕不开的话题。你可能遇到过这样的场景:用户注册…

2026/7/6 21:38:30 阅读更多 →
为什么会有这个问题?

为什么会有这个问题?

Flow Matching 输入分布的推导2.1 均值E[xt]t⋅E[x0](1−t)⋅E[ϵ]t⋅E[x0]若 VAE 有足够强的 KL 约束,使聚合后验满足 E[x0]≈0,则 E[xt]≈0。若 KL 约束较弱,E[x0] 则由数据分布决定,不一定接近零。2.2 方差由 x0 与 ϵ 的独立性…

2026/7/6 21:38:30 阅读更多 →
ML模型服务容器化:从Dockerfile到生产就绪的四层设计

ML模型服务容器化:从Dockerfile到生产就绪的四层设计

1. 项目概述:为什么一个老ML工程师坚持手写Dockerfile,而不是点几下鼠标就完事?我带过三届校招新人,也帮五个业务线做过模型服务化落地。每次聊到容器化,总有人问:“老师,现在不是有各种低代码平…

2026/7/6 21:38:30 阅读更多 →
Ubuntu 22.04 配置 NFS 服务端:3 步实现开发板免拷贝文件共享

Ubuntu 22.04 配置 NFS 服务端:3 步实现开发板免拷贝文件共享

Ubuntu 22.04 高效开发板文件共享:NFS服务端配置全指南在嵌入式开发和Linux系统管理中,频繁地在开发主机与开发板之间传输文件是一项常见但耗时的任务。传统方法如SCP、SFTP或U盘拷贝不仅效率低下,还会打断开发流程。本文将详细介绍如何在Ubu…

2026/7/6 21:36:29 阅读更多 →
learn-opengl入门

learn-opengl入门

opengl是一个大状态机 环境配置 1.下载GLFW源代码 2.创建librarel文件包含include目录和第三方库libs 3.include直接从GLFW的源代码中拿,libs里需要编译生成的库glfw3.lib。 4.通过CMake编译源代码拿到glfw3.lib。 5.将我们的librarel加入编辑器的包含文件和库目录里&#xff0…

2026/7/6 21:34:28 阅读更多 →
初入编程世界感觉眼花缭乱?

初入编程世界感觉眼花缭乱?

眼花缭乱有没有?抽象理解第一个C语言程序1. C语言是什么概括:多用于底层开发的,面向过程的编程语言2. 上来就写程序?我开始也觉得不合理,哪有上来就敲代码嘛...QAQ其实不然,一个最简单的“Hello world”程序…

2026/7/6 21:34:28 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻