笔试专题(十一)

文章目录

  • 添加字符(暴力枚举)
    • 题解
    • 代码
  • 城市群数量(dfs)
    • 题解
    • 代码
  • 判断是不是平衡二叉树(递归)
    • 题解
    • 代码
  • 最大子矩阵(二维前缀和)
    • 题解
    • 代码
  • 小葱的01串 (固定区间大小的滑动窗口)
    • 题解
    • 代码

在这里插入图片描述

添加字符(暴力枚举)

题目链接
在这里插入图片描述

题解

1. 暴力枚举
2. 固定b串的位置,a串每次从0开始枚举,统计不相等的字符个数,求不相等字符个数的最小值,其他位置都可以添加为相等的字符

在这里插入图片描述

代码

#include <iostream>
#include<string>
using namespace std;int main()
{string a,b;cin >> a >> b;int n = a.size();int m = b.size();   int ret = n;for(int i = 0;i <= m - n;i++)// b串 {int tmp = 0;for(int j = 0;j < n;j++)// a串{if(b[i+j] != a[j]){tmp++;}}ret = min(ret,tmp);}cout << ret << '\n';return 0;
}

城市群数量(dfs)

题目链接
在这里插入图片描述

题解

1. 使用dfs,图的遍历
2. 计算联通块的数量,一次dfs,标记走过的数值为1的点标记为true,ret++,然后找下一个值为1的点继续遍历,最终统计出所有的联通块

在这里插入图片描述

代码

class Solution 
{
public:bool vis[210] = {0};int citys(vector<vector<int>>& m) {// 用dfs计算联通块的数量,图的遍历int n = m.size();int ret = 0;for(int i = 0;i < n;i++){if(!vis[i]) {ret++;dfs(m,i);}}return ret;}void dfs(vector<vector<int>>& m,int pos){vis[pos] = true;for(int i = 0;i < m.size();i++){if(!vis[i] && m[pos][i]){dfs(m,i);}}}
};

判断是不是平衡二叉树(递归)

题目链接
在这里插入图片描述

题解

1. 左右子树的节点的个数肯定大于等于0,因此返回值为int,-1既表示返回bool表示每个节点是否是平衡二叉树,又表示该节点的高度
2. 如果返回-1表示该树不是平衡二叉树,否则是平衡二叉树
3. 只需考虑当前节点在干什么就可以写出递归

在这里插入图片描述

代码

/*** struct TreeNode {*	int val;*	struct TreeNode *left;*	struct TreeNode *right;*	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* };*/
class Solution 
{
public:int dfs(TreeNode* root){if(root == nullptr) return 0;int left = dfs(root->left);if(left == -1) return -1;// 剪枝int right = dfs(root->right);if(right == -1) return -1;return abs(left-right) <= 1 ? max(left,right) + 1: -1;}bool IsBalanced_Solution(TreeNode* pRoot) {return dfs(pRoot) != -1;}
}; 

最大子矩阵(二维前缀和)

题目链接
在这里插入图片描述

题解

1. 忘记考虑x2,y2 比 x1,y1大的问题了
2. 枚举出所有的情况需要四层for循环

在这里插入图片描述

代码

#include <iostream>
using namespace std;int a[110][110];
int pre[110][110];int main()
{int n;cin >> n;for(int i = 1;i <= n;i++){for(int j = 1;j <= n;j++){cin >> a[i][j];}}for(int i = 1;i <= n;i++){for(int j = 1;j <= n;j++){pre[i][j] = pre[i-1][j] + pre[i][j-1] - pre[i-1][j-1] + a[i][j];}}// x2,y2必须比x1,y1大,开始的时候没考虑到这一点int ans = -110;int k = 0;for(int x1 = 1;x1 <= n;x1++){for(int y1 = 1;y1 <= n;y1++){for(int x2 = x1;x2 <= n;x2++){for(int y2 = y1;y2 <= n;y2++){k = pre[x2][y2] - pre[x1-1][y2] - pre[x2][y1-1] + pre[x1-1][y1-1];ans = max(ans,k);}}}}cout << ans << '\n';return 0;
}

小葱的01串 (固定区间大小的滑动窗口)

题目链接
在这里插入图片描述

题解

1. 环形的区域不需要统计,在字符串中间的区间如果是符合要求的,那么统计的次数加2,不在字符串中间的区间,那么统计次数加1
2. 统计区间为字符串长度的一半,如果这一半的0的个数和1的个数等于另一半0的个数和1的个数,那么就是符合要求的区间
3. 细节问题:right枚举到n-2位置就结束,因为再向后枚举就重复统计次数了,在第一个区间统计的时候就考虑了后面的区间了
4. 比如0101,如下图

在这里插入图片描述

在这里插入图片描述

代码

// 方法一
#include<iostream>
#include<string>
using namespace std;int main()
{int n;cin >> n;string s;cin >> s;int l = 0,y = 0;for(auto ch : s){if(ch == '0') l++;else y++;}int k = n / 2;// 滑动窗口的区间大小int left = 0,right = 0;int ans = 0;int ling = 0,yi = 0;while(right < n){// 进窗口if(s[right] == '0') ling++;else if(s[right] == '1') yi++;// 判断if(right - left + 1 == k){// 更新结果if(ling == l - ling && yi == y - yi && right != n-1 &&left != 0){ans += 2;}else if(ling == l - ling && yi == y - yi){ans++;}// 出窗口if(s[left] == '0') ling--;else yi--;left++;}right++;}cout << ans << '\n';return 0;
}// 方法二
#include<iostream>
#include<string>
using namespace std;int n;
string s;int main()
{cin >> n >> s;int count[2] = {0};// 统计所有0和1的个数for(auto ch : s){count[ch-'0']++;}int left = 0,right = 0,ret = 0,half = n / 2;// 统计窗口里0和1的个数int hash[2] = {0};// 最后一个再统计就重复统计了// 考虑第一个区间的时候,后面的区间实际上已经考虑过了while(right < n - 1){// 进窗口hash[s[right]-'0']++;// 出窗口while(right - left + 1 > half){hash[s[left++] - '0']--;}// 更新结果if(right - left + 1 == half){if(hash[0] * 2 == count[0] && hash[1] * 2 == count[1]){ret += 2;}}right++;}cout << ret << '\n';return 0;
}

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

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

相关文章

Linux系统:进程终止的概念与相关接口函数(_exit,exit,atexit)

本节目标 理解进程终止的概念理解退出状态码的概念以及使用方法掌握_exit与exit函数的用法以及区别atexit函数注册终止时执行的函数相关宏 一、进程终止 进程终止&#xff08;Process Termination&#xff09;是指操作系统结束一个进程的执行&#xff0c;回收其占用的资源&a…

[苍穹外卖 | 项目日记] 第三天

前言 实现了新增菜品接口实现了菜品分页查询接口实现了删除菜品接口实现了根据id查询菜品接口实现了修改菜品接口 今日收获&#xff1a; 今日的这几个接口其实和之前写的对员工的操作是一样的&#xff0c;都是一整套Curd操作&#xff0c;所以今天在技术层面上并没有…

用 NLP + Streamlit,把问卷变成能说话的反馈

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

算法01-最小生成树prim算法

最小生成树prim算法 题源&#xff1a;代码随想录卡哥的题 链接&#xff1a;https://kamacoder.com/problempage.php?pid1053 时间&#xff1a;2025-04-18 难度&#xff1a;4⭐ 题目&#xff1a; 1. 题目描述&#xff1a; 在世界的某个区域&#xff0c;有一些分散的神秘岛屿&…

利用deepseek+Mermaid画流程图

你是一个产品经理&#xff0c;请绘制一个流程图&#xff0c;要求生成符合Mermaid语法的代码&#xff0c;要求如下&#xff1a; 用户下载文件、上传文件、删除文件的流程过程符合安全规范细节具体到每一步要做什么 graph LRclassDef startend fill:#F5EBFF,stroke:#BE8FED,str…

stl 容器 – map

stl 容器 – map 1. map 和 multimap的使用文档 参考文档 参考文档点这里哟 &#x1f308; &#x1f618; 2. map 类的介绍 map的声明如下 template < class Key, // map::key_type class T, // map::mapped_type class Compare less<Key>, // map::key_…

计算机视觉cv2入门之车牌号码识别

前边我们已经讲解了使用cv2进行图像预处理与边缘检测等方面的知识&#xff0c;这里我们以车牌号码识别这一案例来实操一下。 大致思路 车牌号码识别的大致流程可以分为这三步&#xff1a;图像预处理-寻找车牌轮廓-车牌OCR识别 接下来我们按照这三步来进行讲解。 图像预处理 …

Spring Boot 3 + SpringDoc:打造接口文档

1、背景公司 新项目使用SpringBoot3.0以上构建&#xff0c;其中需要对外输出接口文档。接口文档一方面给到前端调试&#xff0c;另一方面给到测试使用。 2、SpringDoc 是什么&#xff1f; SpringDoc 是一个基于 Spring Boot 项目的库&#xff0c;能够自动根据项目中的配置、…

多路由器通过三层交换机互相通讯(单臂路由+静态路由+默认路由版),通过三层交换机让pc端相互通讯

多路由器通过三层交换机互相通讯&#xff08;单臂路由静态路由默认路由版&#xff09; 先实现各个小框框里能够互通 哇咔 交换机1&#xff08;二层交换机,可看配置单臂路由的文章) Switch>en Switch#conf t Switch(config)#int f0/1 Switch(config-if)#switchport access…

通过gird布局实现div的响应式分布排列

目标&#xff1a;实现对于固定宽度的div盒子在页面中自适应排布&#xff0c;并且最后一行的div盒子可以与前面的盒子对齐。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" con…

AI Agent系列(九) -Data Agent(数据分析智能体)

AI Agent系列【九】 前言一、Data Agent场景二、Data Agent核心因素2.1 数据源2.2 大模型2.3 应用及可视化 三、Data Agent应用场景 前言 Data Agent就是在大模型基础上构建一个数据分析的智能体&#xff0c;是一种基于人工智能技术&#xff0c;特别是大模型技术的数据分析智…

AUTOSAR图解==>AUTOSAR_SWS_DefaultErrorTracer

AUTOSAR 默认错误追踪器(Default Error Tracer)详细分析 基于AUTOSAR 4.4.0规范的深入解析 目录 概述 DET模块的作用DET模块的定位 架构设计 模块架构接口设计 状态与行为 状态转换错误报告流程 API与数据结构 API概览数据类型定义 配置与扩展 模块配置回调机制 总结 1. 概述 …