【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]]++;   //维护right
            if(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;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#安装CommunityToolkit.Mvvm依赖

这里需要有一定C#基础&#xff0c; 首先找到右边的解决方案&#xff0c;右键依赖项 然后选择nuget管理 这里给大家扩展一下nuget的国内源&#xff08;https://nuget.cdn.azure.cn/v3/index.json&#xff09; 然后搜自己想要的依赖性&#xff0c;比如CommunityToolkit.Mvvm 再点…

学历太低,可以学这5个技术,不但好找工作,工资也挺高的!

前言 我今年23岁&#xff0c;勉强把高中上完了。 大家都说上高中的时候非常辛苦&#xff0c;但在我看来&#xff0c;却不是这样的。 因为那时候根本就没有&#xff0c;把精力放在学习上面&#xff0c;而是经常出去泡网吧。 没办法&#xff0c;一个班级里面&#xff0c;大多…

《苍穹外卖》知识梳理6-缓存商品,购物车功能

苍穹外卖实操笔记六—缓存商品&#xff0c;购物车功能 一.缓存菜品 可以使用redis进行缓存&#xff1b;另外&#xff0c;在实现缓存套餐时可以使用spring cache提高开发效率&#xff1b;   通过缓存数据&#xff0c;降低访问数据库的次数&#xff1b; 使用的缓存逻辑&#…

【STM32 CubeMX】SPI_Flash_W25Q64的操作方法

文章目录 前言一、W25Q64操作方法基本概念1.1 读数据1.2 写使能1.3 读状态1.4 擦除扇区1.5 烧写页 总结 前言 在嵌入式系统开发中&#xff0c;使用外部 SPI Flash 存储器可以为 STM32 微控制器提供额外的存储空间&#xff0c;以存储程序代码、配置数据等。W25Q64 是一款常见的…

洛谷P8627 饮料换购 题解

#题外话&#xff08;第27篇题解&#xff09;&#xff08;本题为普及-难度&#xff09; #先看题目 题目链接https://www.luogu.com.cn/problem/P8627 #思路&#xff08;用while循环&#xff0c;循环到山穷水尽为止&#xff0c;用一个计数的计量&#xff09; #代码 #include …

Linux系统——防火墙Firewalld

目录 一、firewalld介绍 1.归入zone顺序 2.firewalld zone分类 3.预定义服务 二、图形化操作 1.打开firewalld图形化界面 2.以http服务为例&#xff0c;打开httpd服务 3.修改端口号 三、命令行配置 1.基础配置 2.查看现有firewalld设置 3.设置查看默认区 4.添加源…

软考-系统集成项目管理中级-信息系统集成与服务管理

本章重要知识点 信息系统集成是指将计算机软件、硬件、网络通信、信息安全等技术和产品集成为能够满足用户特定需求的信息系统。 信息系统的生命周期可以分为立项、开发、运维及消亡四个阶段。 系统的运行维护可分为: 1、更正性维护:更正交付后发现的错误; 2、适应性维护:使…

【第三十六节】工程与模块管理

IDEA 项目结构 层级关系&#xff1a; project&#xff08;工程&#xff09;-module&#xff08;模块&#xff09;-package(包)-class&#xff08;类&#xff09; 具体的&#xff1a; 一个project中可以创建多个module 一个module可以创建多个package 一个package中可以创…

Linux下HTTP隧道技术的应用场景与优势分析

亲爱的Linux侠们&#xff0c;今天我们来聊一聊Linux下HTTP隧道技术的应用场景与优势。在这个网络时代&#xff0c;HTTP隧道技术就如同一位神秘的“魔法师”&#xff0c;为我们解决了许多棘手的网络问题。 首先&#xff0c;让我们来看看HTTP隧道技术在哪些场景下能大展身手。 …

OpenGL学习——14.投光物_点光源

前情提要&#xff1a;本文代码源自Github上的学习文档“LearnOpenGL”&#xff0c;我仅在源码的基础上加上中文注释。本文章不以该学习文档做任何商业盈利活动&#xff0c;一切著作权归原作者所有&#xff0c;本文仅供学习交流&#xff0c;如有侵权&#xff0c;请联系我删除。L…

C++ 多起点的bfs(五十九)【第六篇】

今天我们来学习多起点的bfs 1.多起点的bfs 在普通的广度优先搜索问题中&#xff0c;为了得到从初始状态到达目标状态的最小操作数&#xff0c;则将初始状态放入队列中。离初始状态由近及远地不断扩展出新的状态&#xff0c;直到搜索到目的状态&#xff0c;或队列为空&#xff…

using--派生类引用基类成员

派生类中using前置声明使用基类成员 using可以用于在派生类中声明需要使用的基类的成员。 这种语法只能在有继承关系的类的派生类中使用&#xff0c;不能在无关的类之间使用。 因为C语法默认在一个类A中使用using引用另一个类B的成员,则A一定继承B&#xff1b;如果没有继承关…

向表中插入数据(单行/多行/插入否则更新/插入否则替换)

目录 插入单行数据 指定属性 省略属性列 多行插入 插入否则更新 格式 on duplicate key含义 不同行数的更改 示例 查看影响行数 语法 插入否则替换 格式 不同行数的更改 示例 插入单行数据 insert into 表名 ( &#xff08;属性列名) ) values (数据) 指定属…

GAN:“左右互搏”的卷积网络,不断优化性能中

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 在一个名为“卷王”的世界里&#xff0c;有一个传奇般的存在——生成对抗网络&#xff…

West-wild

信息收集 # nmap -sn 192.168.1.0/24 -oN live.nmap Starting Nmap 7.94 ( https://nmap.org ) at 2024-02-04 14:45 CST Nmap scan report for 192.168.1.1 Host is up (0.00063s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap scan report …

【大厂AI课学习笔记】【2.1 人工智能项目开发规划与目标】(6)特征工程初步

特征工程是一个非常重要的概念&#xff0c;从特征工程可以领会到机器学习的真谛。 特征工程就是从原始数据转换为特征向量的过程。 特征工程的特点&#xff1a; 特征工程是机器学习中很重要的起始步骤&#xff0c;直接影响效果&#xff0c;需要大量的时间。 数据和特征决定了…

计算机设计大赛 深度学习YOLO抽烟行为检测 - python opencv

文章目录 1 前言1 课题背景2 实现效果3 Yolov5算法3.1 简介3.2 相关技术 4 数据集处理及实验5 部分核心代码6 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习YOLO抽烟行为检测 该项目较为新颖&#xff0c;适合作为竞赛课…

java面试微服务篇

目录 目录 SpringCloud Spring Cloud 的5大组件 服务注册 Eureka Nacos Eureka和Nacos的对比 负载均衡 负载均衡流程 Ribbon负载均衡策略 自定义负载均衡策略 熔断、降级 服务雪崩 服务降级 服务熔断 服务监控 为什么需要监控 服务监控的组件 skywalking 业务…

Dog - Shepherd

逼真的牧羊犬模型。 该模型有57块骨头,14700个三角形和4个LOD级别。LOD已启用并配置。 纹理贴图-反照率(阿尔法蒙版)、AO/金属/粗糙度、法线贴图(均为2048x2048)。 2900 个三角形的手机独立模型。 该资产还有一个没有阿尔法通道的狗模型。 100+动画(IP/RM): 攻击(咬、…