【leetcode题解C++】51.N皇后 and 76.最小覆盖子串

51. N皇后

按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。

n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。

每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。

示例 1:

输入:n = 4
输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
解释:如上图所示,4 皇后问题存在两个不同的解法。

示例 2:

输入:n = 1
输出:[["Q"]]

思路:也是做可以作为回溯算法的题型,把每一种情况枚举出来判断可不可行。不过在这一题中,判断是否可行好像需要花一点功夫,拿出来单独写一个函数好了。对整个棋盘,可以一行一行处理,每处理一行只需要判断前面添加过的行是否能满足要求。(初始化棋盘的时候需要注意,一个vector中要有n个有n个‘.’的字符串)。

代码实现:

class Solution {
private:vector<vector<string>> result;void backTrace(int row, int n, vector<string> &chessboard) {if(row == n) {    //添加到n行result.push_back(chessboard);return;}for(int col = 0; col < n; ++col) {if(isValid(row, col, chessboard, n)) {chessboard[row][col] = 'Q';backTrace(row + 1, n, chessboard);chessboard[row][col] = '.';}}}bool isValid(int row, int col, vector<string> &chessboard, int n) {for(int i = 0; i < row; ++i) {    //判断前面的每一行是否有皇后if(chessboard[i][col] == 'Q') {return false;}}for(int i = row - 1, j = col - 1; i >= 0 && j >= 0; --i, --j) {if(chessboard[i][j] == 'Q') {    //判断45度角return false;}}for(int i = row - 1, j = col + 1; i >= 0 && j < n; --i, ++j) {if(chessboard[i][j] == 'Q') {    //判断135度角return false;}}return true;}
public:vector<vector<string>> solveNQueens(int n) {vector<string> chessboard(n, string(n, '.'));backTrace(0, n, chessboard);return result;}
};

76. 最小覆盖子串

给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。

注意:

  • 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。
  • 如果 s 中存在这样的子串,我们保证它是唯一的答案。

示例 1:

输入:s = "ADOBECODEBANC", t = "ABC"
输出:"BANC"
解释:最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。

示例 2:

输入:s = "a", t = "a"
输出:"a"
解释:整个字符串 s 是最小覆盖子串。

示例 3:

输入: s = "a", t = "aa"
输出: ""
解释: t 中两个字符 'a' 均应包含在 s 的子串中,
因此没有符合条件的子字符串,返回空字符串。

 思路:运用滑动窗口的思想,遍历,对出现过的字符用哈希表计数,利用两个哈希表中特定字符数量大于或等于来延长子串(维护滑动窗口),最后用if判断哪个子串更短。其中,还需要一个valid值来记录有几个字符出现过了(valid == t.size( )就是终止条件)。

代码实现:

class Solution {
public:string minWindow(string s, string t) {string ret = s;unordered_map<char,int> smap, tmap;for(char c : t) {tmap[c]++;}int i = 0;int valid = 0;bool flag = false;for(int j = 0; j < s.size(); ++j) {smap[s[j]]++;   //维护rightif(tmap[s[j]] >= smap[s[j]]) {  //计数valid++;}while(smap[s[i]] > tmap[s[i]]) {    //缩短窗口left--smap[s[i]];i++;}if(valid == t.size()) {flag = true;if(j - i + 1 < ret.size()) {    //保留最小子串ret = s.substr(i, j - i + 1);}}}if(flag == false) {return "";}return ret;}
};

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

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

相关文章

用Python和OpenCV搭建自己的一维码和QRCode扫描仪(步骤 + 源码)

导 读 本文主要介绍使用Python和OpenCV搭建自己的一维码和QRCode扫描仪&#xff08;步骤 源码&#xff09;。 项目简介 本文我们将创建一个程序来扫描图像中的二维码和条形码。对于这个程序&#xff0c;我们需要三个包&#xff0c;分别是OpenCV、NumPy和pyzbar。大多数 Pyth…

python中线程/线程池,进程/进程池的创建

创建子线程 # 创建子线程t1 threading.Thread(targetjob,args(1,))# 执行子线程t1.start()# 等待子线程执行print("waiting threading")t1.join()print("threading done")创建子进程 # 创建子进程p1 multiprocessing.Process(targetjob,args(1,),name&qu…

linux kernel 内存踩踏之KASAN_HW_TAGS(MTE)(三)

一、背景 linux kernel 内存踩踏之KASAN&#xff08;一&#xff09;_kasan版本跟hasan版本区别-CSDN博客 linux kernel 内存踩踏之KASAN_SW_TAGS&#xff08;二&#xff09;-CSDN博客 最后来介绍一下KASAN_HW_TAGS&#xff0c;ARM64上就是MTE&#xff0c;这个特性在ARMv8.5支…

贝叶斯网络、概率图模型、全局语义、因果链、朴素贝叶斯模型、枚举推理、变量消元

文章目录 频率学派 vs. 贝叶斯学派贝叶斯学派Probability(概率):独立性/条件独立性:Probability Theory(概率论):Graphical models (概率图模型)什么是图模型(Graphical Models)图是什么计算机科学中的图模型:为什么图模型有用?图模型:统一框架图模型在机器学习中的…

@ 代码随想录算法训练营第8周(C语言)|Day51(动态规划)

代码随想录算法训练营第8周&#xff08;C语言&#xff09;|Day51&#xff08;动态规划&#xff09; Day51、动态规划&#xff08;包含题目 139.单词拆分 &#xff09; 139.单词拆分 题目描述 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict&#xff0c;判定 s 是…

C++数据结构与算法——栈与队列

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…

在Ubuntu-12.04环境下使用新的Rust开发工具

在老旧的系统环境下使用Rust开发工具 笔者的一台硬件资源紧张的旧电脑安装了Ubuntu-12.04&#xff0c;希望在其上运行比较新的Rust开发工具&#xff0c;但却发现其因glibc较老&#xff0c;不能正常运行cargo工具&#xff0c;结果如下&#xff1a; yejqUNIX:~$ uname -a Linux…

电商+支付双系统项目------支付系统的构思

本篇文章会讲讲支付的一些相关的名词概念以及怎么去设计支付系统&#xff0c;通过理解支付的这些名词概念和支付系统的架构&#xff0c;为接下来写支付系统的代码做好准备。 目录 支付------支付资质 支付------支付场景 微信 付款码支付 Native支付 支付宝 条码付 扫码…

问卷设计初探:题目类型概览与注意事项梳理

问卷法常被人们应用于社会调查中&#xff0c;它能反馈出最真实的社会信息。所以&#xff0c;很多企业为了最大程度地了解市场&#xff0c;也经常使用问卷调查法进行研究。不过&#xff0c;想要发挥出问卷法的最大用处&#xff0c;前提是要将问卷设计规范并且可量化。 想要设计…

在JavaScript中的防抖函数 - 通过在React中构建自动完成功能来解释

当你将一个新应用推向生产环境时&#xff0c;你希望确保它用户友好。网站的性能是用户体验的关键部分。每个用户都希望网站及其内容能够快速加载。每一秒都是宝贵的&#xff0c;可能导致用户再也不会访问你的网站。 在本指南中&#xff0c;我们将了解JavaScript中一个非常重要…

SQL 精讲-MySql 常用函数,MySQL语句精讲和举例

FORMAT(数值,保留位数) 四舍五入 SELECT *,FORMAT(score/3,2) from studentROUND(数值,保留位数) 四舍五入 SELECT ROUND(score/3,2) from studentCONCAT(字符串 1,字符串 2) 字符串拼接 SELECT CONCAT(customer_name, (,address,)) from mt_customerLEFT(字符串,长度) 截取…

内存处理函数 内存池

内存处理函数 内存申请函数(stdlib.h) malloc 原形&#xff1a;void *malloc(size_t size); 功能&#xff1a;用于动态分配指定大小的内存块&#xff0c;分配的内存块不会被初始化&#xff0c;内容是未定义的。 返回值&#xff1a;若分配成功&#xff0c;返回一个指向该内存块…

同步缓冲器设计(Synchronous FIFO)

缓冲器又称为队列&#xff0c;是一种数据暂存的机制。缓冲器存在的必要是因为当数据传出端传出数据时&#xff0c;接收端不一定能实时地接收&#xff0c;如果接收端不能实时地接收&#xff0c;又无缓冲器的存在&#xff0c;数据将不可避免会遗失。如果输出输入端的时钟频率一致…

2024.2.15 模拟实现 RabbitMQ —— 消息持久化

目录 引言 约定存储方式 消息序列化 重点理解 针对 MessageFileManager 单元测试 小结 统一硬盘操作​​​​​​​ 引言 问题&#xff1a; 关于 Message&#xff08;消息&#xff09;为啥在硬盘上存储&#xff1f; 回答&#xff1a; 消息操作并不涉及到复杂的增删查改消…

人工智能学习与实训笔记(十四):Langchain之Agent

人工智能专栏文章汇总&#xff1a;人工智能学习专栏文章汇总-CSDN博客 本篇目录 0、概要 1、Agent整体架构 2、langchain中agent实现 3、Agent业务实现逻辑 0、概要 Agent是干什么的&#xff1f; Agent的核心思想是使用语言模型&#xff08;LLM&#xff09;作为推理的大脑…

redis为什么使用跳跃表而不是树

Redis中支持五种数据类型中有序集合Sorted Set的底层数据结构使用的跳跃表&#xff0c;为何不使用其他的如平衡二叉树、b树等数据结构呢&#xff1f; 1&#xff0c;redis的设计目标、性能需求&#xff1a; redis是高性能的非关系型&#xff08;NoSQL&#xff09;内存键值数据…

SpringBoot中公共字段的自动填充

目录 1 前言 2 使用方法 2.1 自定义枚举类 2.2 自定义注解AutoFill 2.3 自定义切面类并设定切入点 2.4 切面类中设置前置通知&#xff0c;对公共字段赋值 2.5 在方法上添加自定义注解 3 最后 1 前言 在我们的项目中&#xff0c;项目表可能会有一些公共的字段需要我们的…

【51单片机实验笔记】开关篇(二) 矩阵按键

目录 前言原理图分析矩阵按键扫描算法 软件实现1. 矩阵键盘检测2. 简易计算器实现 总结 前言 本节内容&#xff0c;我们学习一下矩阵按键&#xff0c;它是独立按键的阵列形式&#xff0c;常见的应用即键盘。 本节涉及到的封装源文件可在《模块功能封装汇总》中找到。 本节完…

websocket数据帧格式

客户端、服务端数据的交换&#xff0c;离不开数据帧格式的定义。因此&#xff0c;在实际讲解数据交换之前&#xff0c;我们先来看下WebSocket的数据帧格式。 WebSocket客户端、服务端通信的最小单位是帧&#xff08;frame&#xff09;&#xff0c;由1个或多个帧组成一条完整的消…

基于协同过滤的时尚穿搭推荐系统

项目&#xff1a;基于协同过滤的时尚穿搭推荐系统 摘 要 基于协同过滤的时尚穿搭推荐系统是一种能自动从网络上收集信息的工具&#xff0c;可根据用户的需求定向采集特定数据信息的工具&#xff0c;本项目通过研究服饰流行的分析和预测的分析和预测信息可视化时尚穿搭推荐系统…