day24| 77.组合 51. N Queens 78.Subsets 79.Word Search 开启岛屿系列以及贪心!

77.

不重复不复选

class Solution {
public:vector<vector<int>> results;vector<int> cur;void backtrack(int n,int k,int level){if(cur.size()>=k){results.push_back(cur);return;}for(int i = level;i<=n;i++){cur.push_back(i);backtrack(n,k,i+1);cur.pop_back();}}vector<vector<int>> combine(int n, int k) {backtrack(n,k,1);return results;}
};
class Solution {
public:vector<vector<string>> results;bool isQualified(vector<string> &map,int i,int j){for(int k = 0;k<i;k++){if(map[k][j] == 'Q') return false;}for(int k = 0;k<j;k++){if(map[i][k] == 'Q') return false;}int row = i;int col1 = j;int col2 = j;int n = map.size();while(row>=1 && col1 >= 1){//left cornerif(map[row-1][col1-1]=='Q') return false;row--;col1--;}row = i;while(row>=1 && col2 < n-1){//left cornerif(map[row-1][col2+1]=='Q') return false;row--;col2++;}return true;}void backtrack(vector<string> &map,int n,int level){if(level>=n){results.push_back(map);return;}for(int i = 0;i<n;i++){map[level][i] = 'Q';if(isQualified(map,level,i)){backtrack(map,n,level+1);}map[level][i] = '.';}}vector<vector<string>> solveNQueens(int n) {//generate mapstring s(n,'.');vector<string> map(n,s);backtrack(map,n,0);return results;}
};

78. Subsets

class Solution {
public:vector<vector<int>> results;vector<int> cur;void traverse(vector<int>& nums, int level){if(level > nums.size()){return;}results.push_back(cur);int n = nums.size();for(int i = level;i<n;i++){cur.push_back(nums[i]);traverse(nums,i+1);cur.pop_back();}}vector<vector<int>> subsets(vector<int>& nums) {traverse(nums,0);return results;}
};

岛屿问题(图论)

79. Word Search

DFS和BFS下的衍生问题

要在参数列表里传递visited数组,目的是不走回头路

代码模板

一般是返回void,进行递归遍历。一开始特判越界,然后特判是否走过,之后对于可走的每一个方向进行递归。

练习了dfs模板题,需要注意2个点:

1. 特判的位置

        首先判断是否已经找到,如果找到后续操作都不进行,尽早return。

        如果越界,也不进行后续,return。

2. 怎么利用visited

        这道题是当word pivot的字母和当前走位字母一样是才可以下一步,如果不一样是不visit的,需要换方向或往回退步。退步前要backtrack, 即让visited变为否。

3. 针对这道题,起始位置在每个位置都有可能,所以要遍历所有初始位置。

class Solution {
public:bool flag=false;vector<vector<bool>> visited;void dfs(vector<vector<char>>& board, string word,int row,int col,int pivot){int m = board.size(),n = board[0].size();if(flag) return;if(pivot == word.size()){flag = true;return;}if(row<0||row>=m||col<0||col>=n){return;}if(visited[row][col]) return;if(word[pivot]==board[row][col]){visited[row][col] =true;dfs(board,word,row,col-1,pivot+1);dfs(board,word,row,col+1,pivot+1);dfs(board,word,row+1,col,pivot+1);dfs(board,word,row-1,col,pivot+1);visited[row][col] = false;}}bool exist(vector<vector<char>>& board, string word) {int m = board.size(),n = board[0].size();visited = vector(m,vector(n,false));for(int i = 0;i<m;i++){for(int j = 0;j<n;j++){dfs(board,word,i,j,0);if(flag) return flag;}}return flag;}
};

131. Palindrome Partitioning

掌握了traverse路径走法就行,判断palindrome,常规题。

class Solution {
public:vector<vector<string>> results;vector<string> cur;bool isPalindrome(string s){int start = 0, end = s.size()-1;while(start<=end){if(s[start]!=s[end]) return false;start++;end--;}return true;}void traverse(string s){if(s.size() == 0){results.push_back(cur);return;}int len = s.size();for(int i = 0;i<len;i++){string subs = s.substr(0,i+1);if(isPalindrome(subs)){cur.push_back(subs);traverse(s.substr(i+1,len-i-1));cur.pop_back();}}}vector<vector<string>> partition(string s) {traverse(s);return results;}
};

200. Number of Islands

dfs的重点是遍历路径!所以需要防止兜圈的visited,以及要回溯来让同一个位置可以多次走(涵盖在不同的路径中)

class Solution {
public:int num;vector<vector<bool>> visited;void dfs(vector<vector<char>>& grid,int row, int col){int m = grid.size(), n = grid[0].size();if(row<0||row>=m||col<0||col>=n) return;if(visited[row][col]) return;if(grid[row][col]=='1'){grid[row][col]='0';visited[row][col] = true;dfs(grid,row-1,col);dfs(grid,row+1,col);dfs(grid,row,col+1);dfs(grid,row,col-1);visited[row][col] = false;}}int numIslands(vector<vector<char>>& grid) {int m = grid.size(), n = grid[0].size();visited = vector(m,vector<bool>(n,false));for(int i = 0;i<m;i++){for(int j = 0; j<n;j++){if(grid[i][j]=='1'){num++;dfs(grid,i,j);//clear an island}}}return num;}
};

207. Course Schedule

dfs遍历所有图节点,判断图结构是否有环

遇到edge 集合,考虑做全图(会有一个节点指向多个节点的情况,以及索引统一方便)

class Solution {
public:vector<bool> onPath;//记录当前路径情况vector<bool> visited;//记录所有节点情况bool hasCycle = false;//建图的作用是为了索引对齐vector<vector<int>> buildGraph(int numCourses,vector<vector<int>> &prerequisites){vector<vector<int>> graph(numCourses);for(auto edge:prerequisites){graph[edge[1]].push_back(edge[0]);//考虑一对多的情况}return graph;}void traverse(vector<vector<int>> &graph, int s){if(onPath[s]){hasCycle = true;//若有环//return;}if(visited[s]||hasCycle){return; //若不合法}visited[s] = true;onPath[s] = true;for(int t:graph[s]){traverse(graph,t);}onPath[s] = false;}bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {vector<vector<int>> graph = buildGraph(numCourses,prerequisites);visited.resize(numCourses,false);onPath.resize(numCourses,false);for(int i = 0;i<numCourses;i++){traverse(graph,i);}return !hasCycle;}
};

994. Rotting Oranges

这题特殊情况要搞明白,

bfs后存在1返回-1,不存在则返回0,time 无变动返回0, time 有变动返回time

定义拿出来的时候算visit,所以我们的time要从-1开始计时.

class Solution {
public:int time=-1;vector<vector<bool>> visited;queue<pair<int,int>> que;void bfs(vector<vector<int>>& grid){int m = grid.size(),n = grid[0].size();while(!que.empty()){int num = que.size();bool add=false;for(int i = 0;i<num;i++){pair<int,int> pos = que.front();que.pop();if(visited[pos.first][pos.second]) continue;if(!add) add = true;visited[pos.first][pos.second] = true;grid[pos.first][pos.second] = 2;if(pos.first>=1&&visited[pos.first-1][pos.second]==false&&grid[pos.first-1][pos.second]==1){que.push({pos.first-1,pos.second});// grid[pos.first-1][pos.second]=2;}if(pos.first<=m-2&&visited[pos.first+1][pos.second]==false&&grid[pos.first+1][pos.second]==1){que.push({pos.first+1,pos.second});// grid[pos.first+1][pos.second]=2;}if(pos.second>=1&&visited[pos.first][pos.second-1]==false&&grid[pos.first][pos.second-1]==1){que.push({pos.first,pos.second-1});// grid[pos.first][pos.second-1]=2;}if(pos.second<=n-2&&visited[pos.first][pos.second+1]==false&&grid[pos.first][pos.second+1]==1){que.push({pos.first,pos.second+1});//  grid[pos.first][pos.second+1]=2;}}if(add) time++;}}int orangesRotting(vector<vector<int>>& grid) {int m = grid.size(),n = grid[0].size();for(int i = 0;i<m;i++){for(int j = 0;j<n;j++){if(grid[i][j]==2) que.push({i,j});}}// if(que.size()==0) return -1;visited = vector(m,vector(n,false));bfs(grid);// find 1for(int i = 0;i<m;i++){for(int j = 0;j<n;j++){if(grid[i][j]==1) return -1;}}if(time == -1) return 0;return time;}
};

贪心

理解:动归特例,满足一些贪心性质,效率更高,达到线性

55. Jump Game

class Solution {
public:int currentMax = 0;bool canJump(vector<int>& nums) {for(int i = 0; i< nums.size()-1;i++){currentMax = max(currentMax,i+nums[i]);if(currentMax<=i) return false; }return currentMax >= (nums.size()-1) ? true : false;}
};

45. Jump Game II 

贪心选择性质:(labuladong)

我们不需要「递归地」计算出所有选择的具体结果然后比较求最值,而只需要做出那个最有「潜力」,看起来最优的选择即可

可行域的扩大,当扩大到超过边界的时候直接叫停。jump计数更新是关键

class Solution {
public:int end = 0, farest = 0;int count = 0;int jump(vector<int>& nums) {int n = nums.size();for(int i = 0; i< n-1;i++){farest = max(farest, nums[i]+i);if(end == i){count++;// reach the marginend = farest;}}return count;}
};

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

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

相关文章

ssm项目(tomcat项目),定时任务(每天运行一次)相同时间多次重复运行job 的bug

目录标题 一、原因 一、原因 debug本地调试没有出现定时任务多次运行的bug&#xff0c;上传到服务器就出现多次运行的bug。&#xff08;war的方式部署到tomcat&#xff09; 一开始我以为是代码原因&#xff0c;或者是linux和win环境不同运行定时任务的方式不一样。 但是自己…

专业135+总分400+重庆邮电大学801信号与系统考研经验重邮电子信息与通信工程,真题,大纲,参考书。

今年分数出来还是比较满意&#xff0c;专业801信号与系统135&#xff0c;总分400&#xff0c;没想到自己也可以考出400以上的分数&#xff0c;一年的努力付出都是值得的&#xff0c;总结一下自己的复习心得&#xff0c;希望对大家复习有所帮助。专业课&#xff1a;&#xff08;…

获取KEGG通路的基因列表 做单细胞GSEA、GSVA分析

使用KEGG通路的基因列表进行单细胞GSEA GSVA分析的过程&#xff0c;我们需要遵循以下步骤&#xff1a; 获取KEGG通路的基因列表&#xff1a;这通常涉及使用专门的R包&#xff0c;如KEGGREST或biomaRt&#xff0c;来查询KEGG数据库并检索特定通路的基因列表。 准备单细胞表达数…

HTML与Logic java基础面试题

序号问题答案21给定一个已经排序好了的数组要在数组中查找某个元素一般使用什么算法二分查找法22java八种基本数据类型 byte,short,int,long,float,double,char,boolean23编码实现一个数组的冒泡排序int nums[] {5,99,100,44,66,20} for(int i0;i<nums.length-1;i){ for…

【设计模式】Java 设计模式之责任链模式(Chain of Responsibility)

责任链模式&#xff08;Chain of Responsibility&#xff09; 一、概述 责任链模式是一种行为设计模式&#xff0c;它允许请求在对象链中传递。每个对象都有机会处理该请求&#xff0c;并且能将其传递给链中的下一个对象。这种模式为请求创建了一个处理对象的链&#xff0c;并…

申请Github Education获取免费Copilot权限(2024.3.18实测成功)

起因&#xff1a;旧帐户Copilot权限被封 我已经离开Github Copilot就无法独自耐着性子写代码了&#xff08;懒惰AI成瘾性&#xff09;&#xff0c;这两天Github Copilot不知道为什么在大规模封号&#xff0c;我不幸也被封号了&#xff08;禁用掉了Github Copilot权限&#xff…

Python:柱状-折线图

写论文&#xff0c;需要画数据分析图&#xff1a; 用柱状图描述算法执行时间用折线图描述性能改进 示例代码&#xff1a; import numpy as np import matplotlib.pyplot as plt from matplotlib.pyplot import MultipleLocatorSecurity ["128", "192",…

RPC浅析,加密数据解析

个人总结 其实就是HOOK注入wbsocket 链接创建服务端和客户端进行通信&#xff0c;直接调用js代码中的加密方法 将结果通过浏览器客户端传入服务端。一种比较好实用的一种技术 https://blog.csdn.net/qq_36759224/article/details/123082574 &#xff08;搬运记录下&#xff…

Linux第82步_“gpio子系统”下的使用KEY开关灯

使用新字符设备驱动的一般模板和“gpio子系统”&#xff0c;以及设备树&#xff0c;驱动KEY和LED。 1、在stm32mp157d-atk.dts文件中添加“gpio_led”和“key0”节点 打开虚拟机上“VSCode”&#xff0c;点击“文件”&#xff0c;点击“打开文件夹”&#xff0c;点击“zgq”&…

HTTPS 协议原理

目录 HTTPS VS HTTP HTTPS是什么 概念准备 常见的加密方式 对称加密 一个简单的对称加密例子 非对称加密 数据摘要&&数据指纹 数字签名 HTTPS 的工作过程探究 方案1-只使用对称加密 方案2-只使用非对称加密 方案3-双方都使用非对称加密 方案4-非对称加密…

Cell发表的单细胞整合方法:LIGER,很好用!

之前&#xff0c;我们已经介绍过其他的整合方法&#xff1a; harmony整合单细胞数据-去除批次效应 Seurat一键完成五种数据整合&#xff1a;harmony&#xff0c;CCA&#xff0c;RPCA,FastMNN,scVI&#xff0c;代码分享 今天来看看Cell发表的LIGER 介绍 LIGER&#xff08;Li…

C++语言学习(二)—— C++语言的基本知识

目录 一、面向对象的三个核心概念 二、C语言中的I/O口 三、C语言中的数据类型​​​​​​​ 3.1 逻辑类型 3.2 引用类型 3.2.1 引用作为函数参数 3.2.2 引用作为函数返回值 3.2.3 引用作为类成员 3.3 类类型 四、 C语言中的内联函数 五、 函数重载 六、 带默认形参…

docker 容器挂掉,无法exec 进入bash 怎么修改容器里的文件

在使用tdengine 数据库时出现了 TDengine.Driver.TDengineError:“code:[0x334],error:Out of dnodes” 查找文档发现需要修改一个配置文件 。 /etc/taos/taos.cfg 中的 supportVnodes 参数 于是修改 保存。然后&#xff0c;运行出错。 03/21 06:56:27.986498 00000064 …

IDEA通过内网穿透实现固定公网地址远程SSH连接本地Linux服务器

文章目录 1. 检查Linux SSH服务2. 本地连接测试3. Linux 安装Cpolar4. 创建远程连接公网地址5. 公网远程连接测试6. 固定连接公网地址7. 固定地址连接测试 本文主要介绍如何在IDEA中设置远程连接服务器开发环境&#xff0c;并结合Cpolar内网穿透工具实现无公网远程连接&#xf…

[音视频学习笔记]六、自制音视频播放器Part1 -新版本ffmpeg,Qt +VS2022,都什么年代了还在写传统播放器?

前言 参考了雷神的自制播放器项目&#xff0c;100行代码实现最简单的基于FFMPEGSDL的视频播放器&#xff08;SDL1.x&#xff09; 不过老版本的代码参考意义不大了&#xff0c;我现在准备使用Qt VS2022 FFmpeg59重写这部分代码&#xff0c;具体的代码仓库如下&#xff1a; …

基于python+vue渔船出海及海货统计系统的设计与实现flask-django-php-nodejs

当今社会已经步入了科学技术进步和经济社会快速发展的新时期&#xff0c;国际信息和学术交流也不断加强&#xff0c;计算机技术对经济社会发展和人民生活改善的影响也日益突出&#xff0c;人类的生存和思考方式也产生了变化。传统渔船出海及海货统计采取了人工的管理方法&#…

抖音视频爬虫下载软件|可导出视频分享链接|视频批量采集工具

无水印视频关键词批量下载工具操作指南 我们自主开发了一款便捷的音视频批量下载工具&#xff0c;不仅支持单个视频链接提取&#xff0c;还可通过关键词搜索实现批量采集和选择性下载&#xff0c;让您轻松获取所需视频内容。 操作说明&#xff1a; 关键词批量采集视频 进入软件…

AI绘画可以稳定生成中文了:白嫖阿里云部署AnyText

长久以来&#xff0c;在AI绘画中书写文字一直是个难题。即使到了SDXL时代&#xff0c;我们也只能输出英文&#xff0c;而且还经常出现漏掉字母的情况。现在阿里达摩院搞出了一个解决方案&#xff0c;可以在Stable Diffusion生成的作品中稳定输出中、英、日、韩等多种文字&#…

python共享单车信息系统的设计与实现flask-django-php-nodejs

课题主要分为二大模块&#xff1a;即管理员模块和用户模块&#xff0c;主要功能包括&#xff1a;用户、区域、共享单车、单车租赁、租赁归还、报修信息、检修信息等&#xff1b; 语言&#xff1a;Python 框架&#xff1a;django/flask 软件版本&#xff1a;python3.7.7 数据库…

探索Code Llama 70B:Meta让AI辅助编程更易获得的举措

探索Code Llama 70B&#xff1a;Meta让AI辅助编程更易获取 在AI技术不断改变软件开发的今天&#xff0c;Meta推出了其最先进的开源基础模型&#xff0c;简化了软件开发流程。这个模型名为Code Llama 70B&#xff0c;旨在让AI辅助代码生成及其相关任务更容易被更广泛的受众获取…