LeetCode Hot100 51~60

  • 图论
    • 51. 岛屿问题
    • 52. 腐烂的橘子
    • 53. 课程表
    • 54. 前缀树
    • 55. 全排列
    • 56. 子集
    • 57. 电话号码
    • 58. 组合总和
    • 59. 括号生成
    • 60. 单词搜索

图论

51. 岛屿问题

经典洪水问题算法

class Solution {
public:int numIslands(vector<vector<char>>& grid) {int nr = grid.size();int nc = grid[0].size();int count = 0;for (int i = 0; i < nr; i++) {for (int j = 0; j < nc; j++) {if (grid[i][j] == '1') {count++;dfs(grid , i , j);}}} return count;}void dfs(vector<vector<char>>& grid , int i , int j) {int row = grid.size();int col = grid[0].size();grid[i][j] = '0';if (i - 1 >= 0 && grid[i-1][j] == '1') {dfs(grid , i - 1 , j);}if (j-1 >= 0 && grid[i][j-1] == '1') {dfs(grid , i , j - 1);}if (j+1 < col && grid[i][j+1] == '1') {dfs(grid , i  , j + 1);}if (i+1 < row && grid[i+1][j] == '1') {dfs(grid , i + 1 , j);}}
};

52. 腐烂的橘子

广度优先遍历 队列来实现

class Solution {int dirt[4][2] = {{-1, 0} , {1 , 0} , {0 , -1} , {0 , 1}};
public:int orangesRotting(vector<vector<int>>& grid) {int min = 0;int fresh = 0;queue<pair<int, int>> que;int row = grid.size();int col = grid[0].size();for (int i = 0; i < row; i++) {for(int j = 0; j < col; j++) {if (grid[i][j] == 1) {fresh++;}if (grid[i][j] == 2) {que.push({i , j});}}}while(!que.empty()) {int n = que.size();bool rotten = false;for (int i = 0; i < n; i++) {auto x = que.front();que.pop();for (auto cur : dirt) {int i = x.first + cur[0]; // 更新x的坐标int j = x.second + cur[1]; // 更新y的坐标if (i>=0 && i < row && j>=0 && j < col && grid[i][j] == 1) {grid[i][j] = 2;que.push({i , j});fresh--;rotten = true;}}}if (rotten) {min++;}}return fresh == 0 ? min : -1;}
};

53. 课程表

class Solution {
public:bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {vector<int> indegrees(numCourses, 0);  // 存储每个课程的入度vector<vector<int>> adjacency(numCourses);  // 存储课程的邻接表queue<int> queue;// 生成入度数组和邻接表for (const auto& cp : prerequisites) {indegrees[cp[0]]++;adjacency[cp[1]].push_back(cp[0]);}// 将入度为 0 的课程加入队列for (int i = 0; i < numCourses; i++) {if (indegrees[i] == 0) {queue.push(i);}}// BFS 拓扑排序while (!queue.empty()) {int pre = queue.front();queue.pop();numCourses--;  // 完成一门课程,剩下的课程数量减少for (int cur : adjacency[pre]) {if (--indegrees[cur] == 0) {queue.push(cur);}}}// 如果所有课程都能完成,返回 truereturn numCourses == 0;}
};

54. 前缀树

struct Node {Node* son[26]{};bool end = false;
};class Trie {Node* root = new Node();int find(string word) {Node* cur = root;for (char c : word) {c -= 'a';if (cur->son[c] == nullptr) {return 0;}cur = cur->son[c];}return cur->end ? 2 : 1;}public:void insert(string word) {Node* cur = root;for (char c : word) {c -= 'a';if (cur->son[c] == nullptr) {cur->son[c] = new Node();}cur = cur->son[c];}cur->end = true;}bool search(string word) {return find(word) == 2;}bool startsWith(string prefix) {return find(prefix) != 0;}
};

55. 全排列

class Solution {
public:vector<int> vis;vector<int> path;void dfs(vector<vector<int>>& ans, vector<int>& nums, int x) {if (x >= nums.size()) {ans.push_back(path);return;}for (int i = 0; i < nums.size(); i++ ) {if (vis[i]) continue;vis[i]++;path.push_back(nums[i]);dfs(ans, nums, x + 1);vis[i]--;path.pop_back();}}vector<vector<int>> permute(vector<int>& nums) {vector<vector<int>> ans;vis.resize(nums.size(), 0);dfs(ans, nums, 0);return ans;}
};

56. 子集

class Solution {
public:vector<int> t;vector<vector<int>> ans;vector<vector<int>> subsets(vector<int>& nums) {int n = nums.size();for (int mask = 0; mask < (1 << n); ++mask) {t.clear();for (int i = 0; i < n; ++i) {if (mask & (1 << i)) {t.push_back(nums[i]);}}ans.push_back(t);}return ans;}
};

57. 电话号码

class Solution {string arr[10] = {"" , "" , "abc" , "def" , "ghi" , "jkl" , "mno" , "pqrs" , "tuv" , "wxyz"};
public:void _letterCombinations(string& digits, int i , string& comb , vector<string>& v){// 首先来看回溯结束的条件 是不是当i走到digits最后的时候就结束啊if (i == digits.size()){v.push_back(comb);return;}int j = 0;string str = arr[digits[i] - '0'];for (j = 0; j < str.size() ; j++ ){_letterCombinations(digits, i+1 , comb += str[j]  , v);comb.pop_back();}}vector<string> letterCombinations(string digits) {// 整体思路: 回溯:// 我们首先看看整个digits字符串是否为空 如果为空的话直接返回一个空的vector就好// 如果不是空 这个时候我们就开始使用回溯算法来遍历数字中所有的组合了// 遍历完全厚直接返回就可以vector<string> v;if (digits.empty()){return v;}string comb; // 这个字符串用来接受最后的值// 接下来开始回溯算法 _letterCombinations(digits, 0 ,  comb ,  v);return v;}
};

58. 组合总和

class Solution {
public:vector<vector<int>> combinationSum(vector<int>& candidates, int target) {vector<int> state;              // 状态(子集)sort(candidates.begin(), candidates.end()); // 对 candidates 进行排序int start = 0;                  // 遍历起始点vector<vector<int>> res;        // 结果列表(子集列表)backtrack(state, target, candidates, start, res);return res;}
private:void backtrack(vector<int> &state, int target, vector<int> &choices, int start, vector<vector<int>> &res) {// 子集和等于 target 时,记录解if (target == 0) {res.push_back(state);return;}// 遍历所有选择// 剪枝二:从 start 开始遍历,避免生成重复子集for (int i = start; i < choices.size(); i++) {// 剪枝一:若子集和超过 target ,则直接结束循环// 这是因为数组已排序,后边元素更大,子集和一定超过 targetif (target - choices[i] < 0) {break;}// 尝试:做出选择,更新 target, startstate.push_back(choices[i]);// 进行下一轮选择backtrack(state, target - choices[i], choices, i, res);// 回退:撤销选择,恢复到之前的状态state.pop_back();}}
};

59. 括号生成

class Solution {void backtrack(vector<string>& ans, string& cur, int open, int close, int n) {if (cur.size() == n * 2) {ans.push_back(cur);return;}if (open < n) {cur.push_back('(');backtrack(ans, cur, open + 1, close, n);cur.pop_back();}if (close < open) {cur.push_back(')');backtrack(ans, cur, open, close + 1, n);cur.pop_back();}}
public:vector<string> generateParenthesis(int n) {vector<string> result;string current;backtrack(result, current, 0, 0, n);return result;}
};

60. 单词搜索

class Solution {
public:bool exist(vector<vector<char>>& board, string word) {rows = board.size();cols = board[0].size();for(int i = 0; i < rows; i++) {for(int j = 0; j < cols; j++) {if (dfs(board, word, i, j, 0)) return true;}}return false;}
private:int rows, cols;bool dfs(vector<vector<char>>& board, string word, int i, int j, int k) {if (i >= rows || i < 0 || j >= cols || j < 0 || board[i][j] != word[k]) return false;if (k == word.size() - 1) return true;board[i][j] = '\0';bool res = dfs(board, word, i + 1, j, k + 1) || dfs(board, word, i - 1, j, k + 1) || dfs(board, word, i, j + 1, k + 1) || dfs(board, word, i , j - 1, k + 1);board[i][j] = word[k];return res;}
};

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

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

相关文章

SpringBoot的validation参数校验

文章目录 前言一、引入validation 依赖二、validation中的注解说明 &#xff08;1&#xff09;Validated&#xff08;2&#xff09;Valid&#xff08;3&#xff09;NotNull&#xff08;4&#xff09;NotBlank&#xff08;5&#xff09;NotEmpty&#xff08;6&#xff09;Patte…

SSH克隆github项目

1、生成密钥 ssh-keygen -t rsa -C "你的邮箱xxx.com" 全程回车即可&#xff08;不用输入ras文件名及密码&#xff09;、为了方便下面的公钥查看 2、配置公钥 查看公钥内容 cat c:\Users\xxx\.ssh\id_rsa.pub(修改为自己的路径及名字) 将公钥内容复制并粘贴至…

CASAIM与中国航天携手合作,CASAIM IS全自动化光学测量系统交付中国航天山西工厂,助力航空航天零部件全自动化3D测量

近日&#xff0c;CASAIM与中国航天达成全自动化光学测量技术合作&#xff0c;并将CASAIM IS全自动化光学测量系统交付给中国航天科技集团山西工厂&#xff0c;这一合作标志着双方在智能制造和精密测量领域迈出了重要一步。 中国航天科技&#xff0c;是在中国战略高技术领域拥有…

基于Springboot+Vue的电子博物馆系统

基于SpringbootVue的电子博物馆系统 前言&#xff1a;随着信息技术的不断发展&#xff0c;传统博物馆的参观方式逐渐向数字化、在线化转型。电子博物馆作为这一转型的重要组成部分&#xff0c;能够通过信息化手段为用户提供更丰富、更便捷的博物馆参观体验。本文基于Spring Boo…

【软考速通笔记】系统架构设计师⑭——面向服务架构设计理论与实践

文章目录 一、前言二、基础知识2.1 介绍2.2 作用 三、参考架构四、主要协议五、设计原则六、设计模式6.1 服务注册模式6.2 企业服务总线模式6.3 微服务模式6.4 微服务架构模式方案 七、注意事项 一、前言 笔记目录大纲请查阅&#xff1a;【软考速通笔记】系统架构设计师——导读…

K8S的资源配置

资源配额 当多个用户或团队共享具有固定节点数目的集群时&#xff0c;人们会担心有人使用超过其基于公平原则所分配到的资源量。资源配额是帮助管理员解决这一问题的工具。资源配额&#xff0c;通过 ResourceQuota 对象来定义&#xff0c;对每个命名空间的资源消耗总量提供限制…

Python+OpenCV系列:入门环境搭建、图像读写、像素操作、色彩空间和通道、

入门环境搭建、图像读写、像素操作、色彩空间和通道 **Python与OpenCV环境搭建、图像处理与色彩空间介绍****引言****1. Python和OpenCV的环境搭建****1.1 安装Python和OpenCV****1.2 配置开发环境** **2. 图像的读取、显示与保存****2.1 图像的读取****2.2 图像的显示****2.3 …

在Docker中部署禅道,亲测可用

1、确保centos中已安装docker docker -v 2、启动docker systemctl start docker 3、可设置docker开机启动 systemctl enable docker.service 4、获取最新版禅道开源版镜像 docker pull idoop/zentao 5、运行镜像生成禅道容器【创建 /data/www /data/data 目录】 doc…

vitepress组件库文档项目 markdown语法大全(修正版)

#上次总结的 有些语法是用在markdown文档中的 使用到vitepress项目中有些语法可能有出入 于是我再总结一版 vitepress项目中的markdown语法大全 在阅读本章节之前&#xff0c;请确保你已经对 Markdown 有所了解。如果你还不了解 Markdown &#xff0c;请先学习一些Markdown 教…

String IP和Int IP的互相转换

android中&#xff0c;wifiManager.connectionInfo.ipAddress 可以获取到wifi的ip地址&#xff0c;但这是一个int值&#xff0c;如何转换为常见的如192.168.1.129这种形式&#xff0c;以及这种形式如何转换回int值的形式。 这里ip分为4段&#xff0c;每一段的值都是0 ~ 255&am…

Blender导入下载好的fbx模型像的骨骼像针戳/像刺猬

为什么我下载下来的骨骼模型和我自己绑定的模型骨骼朝向完全不一样 左边是下载的模型 右边是我自己绑定的模型 左边的模型刚刚感觉都是像针一样往外戳的&#xff0c;像刺猬一样那种。 解决方法勾选自动骨骼坐标系

python 清华pip镜像源报HTTP error 403

报错信息 ERROR: HTTP error 403 while getting https://mirrors.tuna.tsinghua.edu.cn/pypi/web/packages/52/79/a64937a2185b91a96cc5406e3ea58120980c725543d047e112fb3084a972/fake_useragent-2.0.0-py3-none-any.whl (from https://mirrors.tuna.tsinghua.edu.cn/pypi/we…

ASP.NET CORE API 解决跨域问题

环境 vs2022 .net 8 创建ASP.net Core API项目 配置跨域 编写ApiController 启动项目 得到服务器运行的 地址 在Hbuiler中创建web项目&#xff0c;编写代码 【运行】-【运行到浏览器】-选择一个浏览器,查看结果 正常显示 问题 如果允许所有源访问&#xff0c;有安全风险方…

Android 第三方框架:RxJava:源码分析:观察者模式

文章目录 观察者模式RxJava中的观察者模式总结 ​​​​​​​​​​​​​​观察者模式​​​​​​​ RxJava中的观察者模式 以Observable、ObservableOnSubscribe、Observer为例 Observable是被观察者 负责发射事件或数据 Observer是观察器 负责对从被观察者中获取的数…

【AI系统】MobileFormer

MobileFormer 在本文中&#xff0c;将介绍一种新的网络-MobileFormer&#xff0c;它实现了 Transformer 全局特征与 CNN 局部特征的融合&#xff0c;在较低的成本内&#xff0c;创造一个高效的网络。通过本节&#xff0c;让大家去了解如何将 CNN 与 Transformer 更好的结合起来…

如何实现表格选中时禁用树结构的复选框功能(El-Tree 与 El-Table 联动实现)

在前端开发中&#xff0c;树形结构和表格是常用的组件组合&#xff0c;尤其是在展示和管理复杂数据时。使用 Element UI 的 el-tree 和 el-table 组件&#xff0c;我们可以实现当表格中有选中行时&#xff0c;自动禁用树结构中的复选框&#xff0c;反之亦然。这不仅提升了用户体…

决策树:ID3、C4.5和CART特征选择方式

1 前言 该文章主要目的是记录ID3、C4.5和CART特征选择方式&#xff0c;这里只对决策树进行简单介绍。 决策树&#xff08;Decision Tree&#xff09;算法是一种有监督学习算法&#xff0c;它利用分类的思想&#xff0c;根据数据的特征构建数学模型&#xff0c;从而达到数据的筛…

【3D AIGC】Img-to-3D、Text-to-3D、稀疏重建(2024年文章汇总)

文章目录 1. Wonderworld&#xff1a;拓展图片边界&#xff0c;生成3D场景2. 3DTopia-XL&#xff1a;扩散模型辅助生成3. 3DGS-Enhancer: 通过视图一致2D Diffusion&#xff0c;提升无界3D Gaussian Splatting (NlPs2024 Spotlight)4. L3DG&#xff1a;Latent 3D Gaussian Diff…

三款电容麦的对比

纸面参数 第一款麦克风 灵敏度: -36 dB 2 dB&#xff08;0 dB1V/Pa at 1 kHz&#xff09; 灵敏度较低&#xff0c;需要更高的增益来拾取同样的音量。频率响应: 40 Hz - 18 kHz 响应范围较窄&#xff0c;尤其在高频区域。等效噪音级: ≤18 dB&#xff08;A计权&#xff09; 噪…

运行 GreatSQL 时为什么要求关闭透明大页

在大部分运维规范中&#xff0c;一般都会要求在运行 GreatSQL/MySQL 的环境中要关闭透明大页&#xff0c;那么到底什么是透明大页&#xff0c;为什么要关闭&#xff0c;打开有什么风险吗&#xff1f; 在此之前&#xff0c;我也是有点懵的&#xff0c;本文试着回答这个疑问&…