代码随想录66——额外题目【回溯、贪心】:52N皇后II、649Dota2 参议院、1221分割平衡字符串

news2024/11/26 20:49:15

文章目录

  • 1.52N皇后II
    • 1.1.题目
    • 1.2.解答
  • 2.649Dota2 参议院
    • 2.1.题目
    • 2.2.解答
  • 3.1221分割平衡字符串
    • 3.1.题目
    • 3.2.解答

1.52N皇后II

参考:代码随想录,52N皇后II;力扣题目链接

1.1.题目

在这里插入图片描述

1.2.解答

这道题和之前做过的 51.N皇后 是一模一样的,只不过51那道题是求所有的棋盘摆放的方案,而本题只需要知道所有的方案的个数。其实只是在统计结果的时候操作不同而已,其他都是一样的。

直接给出代码如下,和51题基本上是一样的。

int count;   // 最后的结果

bool isValid(int row, int col, int n, vector<string>& chess)
{
    // 判断列是否合法
    for(int i = 0; i < row; i++)
        if(chess[i][col] == 'Q')
            return false;
    // 判断左上是否合法
    for(int i = row-1, j=col-1; i >=0 && j>=0; i--, j--)
        if(chess[i][j] == 'Q')
            return false;
    // 判断右上是否合法
    for(int i = row-1, j=col+1; i >=0 && j<n; i--, j++)
        if(chess[i][j] == 'Q')
            return false;
    return true;
}


void backtracking(int row, int n, vector<string>& chess)
{
    // 2.回溯终止条件:放到了最后一行
    if(row == n)
    {
        count++;  // 放满了棋盘格,得到一个合理的解
    }

    // 3.开始递归:遍历这一行的所有列
    for(int col = 0; col < n; col++)
    {
        if(isValid(row, col, n, chess))  // 判断当前位置放一个皇后是否合法
        {
            chess[row][col] = 'Q';   // 放置皇后
            backtracking(row+1, n, chess);   // 递归
            chess[row][col] = '.';   // 回溯
        }
    } 
}

int totalNQueens(int n)
{
    vector<string> chess(n, string(n, '.'));  // 初始化棋盘格
    backtracking(0, n, chess);  // 然后开始遍历,放置皇后
    return count;   // 最后返回所有可能的结果
}

2.649Dota2 参议院

参考:代码随想录,649Dota2 参议院;力扣题目链接

2.1.题目

在这里插入图片描述
在这里插入图片描述

2.2.解答

TODO:暂时没有AC,看了代码随想录上的讲解,感觉还挺简单的,但是自己稍微换了一种写法就无法AC了,自己的写法如下:

感觉还是不太明白,因为当前的位置的R和T,都是要优先消灭后面的R和T,这样该怎么操作。

string predictPartyVictory(string senate)
{
    bool haveR = true;
    bool haveT = true;
    int numR = 0;   // 当前位置之前(包括当前位置)含有的R的个数
    int numT = 0;   // 当前位置之前(包括当前位置)含有的T的个数

    // 只要数组中还有R并且还有T,那么就还没有消灭完毕,则继续消灭
    while(haveR && haveT)
    {
        // 先认为没有R和T了,如果后面执行过程中被修改成true了,则说明还有R和T
        haveR = false;
        haveT = false;  
        for(int i = 0; i < senate.size(); i++)
        {
            if(senate[i] == 'R')
            {
                numR++;   // 首先字符R的个数++
                if(numT >= numR)   // 如果当前位置前面的T个数 >= 当前位置R的个数,则可以消灭
                {
                    senate[i] = 0;  // 消灭R,为下一次循环做准备
                    numR--;
                }
                else
                    haveR = true;   // 否则不能消灭R,置位
            }
            else if(senate[i] == 'T')
            {
                numT++;
                if(numR >= numT)
                {
                    senate[i] = 0;
                    numT--;
                }
                else
                    haveT = true;
            }
        }
    }

    return haveR == true ? "Radiant" : "Dire";  // 根据最后haveR还是T返回结果
}

3.1221分割平衡字符串

参考:代码随想录,1221分割平衡字符串;力扣题目链接

3.1.题目

在这里插入图片描述

3.2.解答

这道题目看起来好像很复杂,其实是非常简单的贪心。

从前向后遍历,只要遇到平衡子串,计数就+1,遍历一遍即可

局部最优:从前向后遍历,只要遇到平衡子串 就统计

全局最优:统计了最多的平衡子串。

局部最优可以推出全局最优,举不出反例,那么就试试贪心。

例如,LRLR 这本身就是平衡子串 , 但要遇到LR就可以分割

最后直接给出代码如下,非常简单:

int balancedStringSplit(string s)
{
    int result = 0; // 最后平衡字符串的个数
    int count = 0;  // 字符串中R的个数

    // 遍历一遍字符串,寻找平衡子串
    for (const auto &ch : s)
    {
        if (ch == 'R')
            count++;
        else
            count--;
        if(count == 0)  // 遇到一个平衡子串
            result++;
    }
    
    return result;
}

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

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

相关文章

怿星科技参加2022(第六届)高工智能汽车年会

2022&#xff08;第六届&#xff09;高工智能汽车年会将于下周三在上海虹桥拉开帷幕&#xff0c;怿星科技作为本次活动的赞助商&#xff0c;将在11月30日下午的【座舱算力与系统】分论坛与大家分享关于智能汽车软硬分离探索与实践的专题演讲。此外&#xff0c;在活动期间&#…

docker 之间相互通讯

方式一&#xff1a;通过IP直接访问(不推荐) 查询容器对应的IP命令&#xff1a; docker inspect 容器 | grep IPAddress 通过docker容器启动的实例分配的ip地址&#xff0c;直接访问&#xff0c;docker重启时IP会发生变化&#xff0c;所以不推荐 方式二&#xff1a;通过端口…

html 多按钮点击按钮颜色改变 捷弘和宇乐两个按钮,在点击选中时颜色做区分

捷弘和宇乐两个按钮&#xff0c;在点击选中时颜色做区分 点击捷弘按钮&#xff0c;捷弘按钮颜色改变&#xff1b;点击宇乐按钮&#xff0c;宇乐按钮颜色改变&#xff0c;捷弘按钮颜色恢复 如图&#xff1a; html代码&#xff1a; <a id"jiehong" class"bt…

安泰测试-Keithley吉时利2461数字源表产品参数

Keithley SMU 2461,吉时利2461数字源表&#xff1a; Keithley SMU 2400 图形系列 SourceMeter 溯源、测量、绘图和分析功能触手可及 Keithley 的触摸屏图形源测量单元仪器可带来直观的测试平台体验&#xff0c;满足电源和测量需求。 应用&#xff1a;离散设备、组件、FET、二管…

cpu设计和实现(pc跳转和延迟槽)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 cpu按部就班地去取指执行是理想情况。很多时候&#xff0c;cpu的pc寄存器会跳来跳去的。跳转的情况很多&#xff0c;一般可以分成三种。第一&#…

CRM软件哪个好?国内外6大顶级CRM软件盘点

CRM软件哪个好&#xff1f;国内外8大顶级CRM软件盘点 市场上存在上千种CRM管理系统&#xff0c;他们各有特色&#xff0c;难免让企业在选型时遇到诸多困难&#xff0c;有人说这款好用&#xff0c;有人说哪款好用... 所以本文将整理国内外那些顶级的CRM软件。 一、国内外6款CR…

分省/市/县最低工资标准-12-2021年1949-2020全国/省/市/县GDP数据

一、最低工资数据 1、数据来源&#xff1a;各省\市\县政府公布资料 2、时间跨度&#xff1a;2012-2021年 3、区域范围&#xff1a;全国各省\市\县 4、指标说明&#xff1a; 部分数据如下&#xff1a; 二、各省市县人均GDP 1、数据来源&#xff1a;地方统计局 2、时间跨度…

客户CRM能给企业带来哪些用处?

一、民营企业增加更多的总收入 CRM控制系统透过软件系统数个沟通沟通交流平台&#xff0c;不断扩大了与客人的沟通沟通交流距&#xff0c;保有终端版CRM&#xff0c;产品销售项目组足不出户与客人沟通交流&#xff0c;给民营企业增添了极高的股权投资股权投资回报。 简道云CR…

centos7中sshd -t没内容输出日志也没内容但sshd服务重启一直失败解决方法、strace命令的使用以及使用场景说明

文章目录ssh服务启动报错问题sshd启动报错说明解决方法常规排除定位法解决修改ssh的selinux上下文扩展知识【strace命令】ssh服务启动报错问题 sshd启动报错说明 sshd服务如果起不来&#xff0c;查日志一般都会有相应信息记录&#xff0c;如果sshd -t中有输出&#xff0c;不会…

都要2023年了,Android开发是否还值得入场?

随着手机行业的飞速发展&#xff0c;现在国产手机也迎来了高速发展时期&#xff0c;越来越多的人使用国产手机&#xff0c;同时开发安卓APP的人也越来越多了&#xff0c;下面来看看安卓app开发市场前景如何&#xff1f; 1、 消费用户群体成熟。安卓智能手机的市场份额可以说是庞…

Linux进程通信:命名管道,System V共享内存

目录 1.命名管道 2.共享内存 3.共享内存和管道的生命周期 4.共享内存的优缺点 1.命名管道 命名管道和匿名管道的最大差别是&#xff1a;命名管道是创建在磁盘里的一个有名字的文件。这个文件不存实际的数据。但是不同进程可以通过文件路径找到相同的struct file&#xff08…

你好,法语!A2知识点总结(2)

2.各种词类 2.1代词 代词&#xff0c;形容词&#xff0c;副词&#xff0c;介词 重读人称代词 1&#xff09;构成 2&#xff09;作用 1-重读人称代词≧2 一般次序&#xff1a;“他/她/它、你、我” Ex: Elle, toi et moi, nous allons faire du shopping. 2-soi: 泛指 Ex: -…

网络管理中TRUNK的作用和使用

作者简介&#xff1a;一名99年软件运维应届毕业生&#xff0c;正在自学云计算课程。宣言&#xff1a;人生就是B&#xff08;birth&#xff09;和D&#xff08;death&#xff09;之间的C&#xff08;choise&#xff09;&#xff0c;做好每一个选择。创作不易&#xff0c;动动小手…

路径规划算法之几何建模

目录 1 几何建模简介 1.1 机器人建模 1.2 环境建模 2 多边形和多面体模型 2.1 凸集的定义 2.2 凸集的边界表示与实心表示 2.3 非凸多边形 2.4 逻辑谓词 2.5 多面体模型 2.6 阿拉伯数字半代数模型 2.7 非凸多边形的另一种编码 2.8 3D三角形 2.9 非均匀有理B样条曲线…

Qt Quick、QML01——QML内容结构介绍

目录标题一、从Window 窗口组件开始&#xff08;一&#xff09;属性flags 表&#xff1a;visibility 表&#xff08;二&#xff09;信号和处理器&#xff08;槽函数&#xff09;&#xff08;通用&#xff09;&#xff08;三&#xff09;调用函数&#xff08;通用&#xff09;&a…

MapReduce Partition 分区

MapReduce Partition 分区 MapReduce输出结果个数研究 在默认情况下 不管Map阶段有多少个并发执行的task&#xff0c;到Reduce阶段&#xff0c;所有结果都将有一个task来进行处理&#xff0c;并且最终结果将输出到一个文件中&#xff0c;part-r-0000。 可以进行手动的设置re…

微信小程序图书商城毕业设计,图书商城购物小程序系统设计与实现,图书商城购物小程序商城毕设作品参考

功能清单 【后台管理员功能】 会员列表&#xff1a;查看所有注册会员信息&#xff0c;支持删除 录入资讯&#xff1a;录入资讯标题、内容等信息 管理资讯&#xff1a;查看已录入资讯列表&#xff0c;支持删除和修改 广告设置&#xff1a;上传图片和设置小程序首页轮播图广告地…

相机拍照不清晰怎么回事?不清晰地照片还能修复高清吗?

现在有很多的人都非常的喜欢拍照&#xff0c;主要就是因为喜欢记录&#xff0c;抓住我们身边的美&#xff0c;但是拍照的话就要使用相机&#xff0c;那么像相机电子产品我们在平常的时候是使用不到的&#xff0c;只有在有需求的时候可以使用的&#xff0c;而且也是有需求的人才…

Spring Security(6)

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e; Spring Security使用MySQL保存cookie记录虽然方便&#xff0c;但是目前更多的主流互联网应用都是用NoSQL来保存非业务数据的&#xff0c;Spring Security也应该可…

案例分享|生产环境MQ集群一个非常诡异的消费延迟排查

1、问题现象 某一天&#xff0c;项目组一个同事向我反馈&#xff0c;他们使用公司的数据同步产品将MySQL数据同步到MQ集群&#xff0c;然后使用消费者将数据再同步到ES&#xff0c;反馈数据同步延迟严重&#xff0c;但对应的消费组确没有积压&#xff0c;但最近最近几分钟的数…