笔试练习day7

news/2024/10/21 2:21:25/

目录

  • OR59 字符串中找出连续最长的数字串
    • 题目解析
      • 解法(双指针遍历)
        • 代码
  • NC109 岛屿数量
    • 题目解析
      • 解法
        • 代码(dfs)
        • dfs的实现
  • 拼三角
    • 题目解析
      • 解法(枚举)
        • 代码

感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接
🐒🐒🐒 个人主页
🥸🥸🥸 C语言
🐿️🐿️🐿️ C语言例题
🐣🐣🐣 python
🐓🐓🐓 数据结构C语言
🐔🐔🐔 C++
🐿️🐿️🐿️ 文章链接目录
🏀🏀🏀 笔试练习题

OR59 字符串中找出连续最长的数字串

OR59 字符串中找出连续最长的数字串

在这里插入图片描述

题目解析

这道题是找出最长连续的数字,并将这串数字以字符串的形式输出,解题的思路就是用两个指针(i和j)遍历这个字符串
在这里插入图片描述
当i指针第一次遇到数字字符时就将位置给到j指针
在这里插入图片描述
在这里插入图片描述
此时j往后开始去查找这个连续的数字字符串有多长,当j遇到不是数字字符的时候就表示这个连续的数字字符串已经找完了,要计算他的长度.这个长度的计算我们可以直接用两个变量去记录这个数字字符串的起始位置和长度
在这里插入图片描述

然后i变到j的下一个位置继续重复上面操作
在这里插入图片描述
当遇到字符串长度比之前的len要大的时候就更新begin和len

解法(双指针遍历)

代码
int main() {string s;cin >> s;int begin = -1, len = 0;for (int i = 0; i < s.size(); i++) {if (s[i] >= '0' && s[i] <= '9') {int j = i;while (j < s.size() && s[j] >= '0' && s[j] <= '9' ) {j++;}if (j - i > len) {len = j - i;begin = i;}i = j + 1;}}cout << s.substr(begin, len) << endl;return 0;
}

NC109 岛屿数量

NC109 岛屿数量
在这里插入图片描述

题目解析

根据题目描述下面的这个例子有3个岛屿
在这里插入图片描述
其中绿色圆圈圈起的数字虽然没有上下左右之间的关系,但是也是相连的岛屿
在这里插入图片描述

解法

这道题解法就是通过bfs/dfs搜索去寻找连通的岛屿并标记已经找到的岛屿

代码(dfs)
class Solution {public:int m, n;int dx[4] = {0, 0, 1, -1};int dy[4] = {1, -1, 0, 0};bool vis[210][210] = {0};int solve(vector<vector<char> >& grid) {m = grid.size(), n = grid[0].size();int ret = 0;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (grid[i][j] == '1' && !vis[i][j]) {ret++;dfs(grid, i, j);}}}return ret;}};

因为这个岛屿需要上下左右的搜索,所以需要方向数组(之前的题也有类似的)
在搜索时需要进行标记已经搜索过的岛屿,所以要用一个bool类型的数组vis,因为岛屿矩阵的范围是200200,所以vis数组的范围我们应该选择大于200200的范围
二维数组的长和宽我们用m和n进行表示,ret来记录有多少个岛屿
通过两层for循环去遍历这个二维数组
然后用条件判断当grid[i][j]==1的时候表示这里有岛屿,且我们还要看这个岛屿是否之前已经被搜索过了,所以!vis[i][j]
条件符合时就让ret++记录这个岛屿,并且用dfs去标记周围连通的岛屿

dfs的实现
   void dfs(vector<vector<char>>& grid, int i, int j) {vis[i][j] = true;for (int k = 0; k < 4; k++) {int x = i + dx[k], y = j + dy[k];if (x >= 0 && x < m && y >= 0 && y < n && grid[x][y] == '1'&&!vis[x][y]) {dfs(grid, x, y);}}}

进入dfs时grid[i][j]是有岛屿的,所以要进行标记
然后利用方向数组对grid[i][j]的周围进行搜索,并且要判断是否越界,当满足grid[x][y] == '1’和vis[x][y]没有被标记时就继续进入dfs(grid, x, y)

拼三角

拼三角
在这里插入图片描述

题目解析

题目意思就是给了6个棍子,但是这6个棍子的长度是不一样的,需要在选出3根来组成一个三角形的同时剩下的3根也能组成

解法(枚举)

因为这道题只给了6根棍子,所以搭配的方式比较少,我们可以把所有情况列出来
由排列组合可得所以的情况只有654/322=10种
具体我们可以用三重for循环去枚举,第一个for循环选第一根棍子,第二跟for循环选第二跟棍子,第三个for循环就选第三根棍子,在循环内部再检查是否能组成三角形
第二个方法就是用dfs去枚举

第三个方法就是优化后的枚举
我们知道三角形的判断条件如下
在这里插入图片描述
我们假设三个棍子长度分别为a b c
如果我们将这三个棍子长度进行排序,那么我们判断条件就会简单许多
假如a<b<c
在这里插入图片描述
那么我们就会发现判断条件就会少两个
在这里插入图片描述
所以我们对开始的6根棍子进行排序,排序过后就需要枚举以下的10种情况
在这里插入图片描述
当我们在枚举0 1 2和3 4 5的时候如果他们的条件成立就不需要再枚举后面的情况(因为已经满足条件了)
在这里插入图片描述
而如果枚举0 1 2和3 4 5的时候发现不满足条件那么他后面的几种情况就不需要再考虑(因为0+1<2那么0+1也同时<3)
在这里插入图片描述
所以根据上面的思路我们只需要枚举4种情况就可以了
在这里插入图片描述

代码
#include<iostream>
#include<algorithm>
using namespace std;
int t;
int arr[6];
int main()
{cin>>t;while(t--){for(int i=0;i<6;i++)cin>>arr[i];sort(arr,arr+6);if(arr[0]+arr[1]>arr[2]&&arr[3]+arr[4]>arr[5]||arr[0]+arr[2]>arr[3]&&arr[1]+arr[4]>arr[5]||arr[0]+arr[3]>arr[4]&&arr[1]+arr[2]>arr[5]||arr[0]+arr[4]>arr[5]&&arr[1]+arr[2]>arr[3])cout<<"Yes"<<endl;elsecout<<"No"<<endl;}return 0;
}

http://www.ppmy.cn/news/1540666.html

相关文章

DBSwitch和Seatunel

一、DBSwitch 什么是DBSwitch?它主要用在什么场景&#xff1f; 通过步骤分析可以看到这个是通过配置数据源&#xff0c;采用一次性或定时方案&#xff0c;同步到数据仓库的指定表&#xff0c;并且指定映射关系的工具。有点类似于flinkcdc的增量同步。 参考&#xff1a; dbs…

webAPI中的排他思想、自定义属性操作、节点操作(配大量案例练习)

一、排他操作 1.排他思想 如果有同一组元素&#xff0c;我们想要某一个元素实现某种样式&#xff0c;需要用到循环的排他思想算法&#xff1a; 1.所有的元素全部清除样式 2.给当前的元素设置样式 注意顺序能不能颠倒&#xff0c;首先清除全部样式&#xff0c;再设置自己当前的…

Debian12离线部署docker详细教程

1、转至 https://download.docker.com/linux/debian/dists/ 2、在列表中选择您的 Debian 版本。 cat /etc/os-release # 我的版本号是bookworm3、转到pool/stable/并选择适用的架构&#xff08;amd64、 armhf、arm64或s390x&#xff09; 4、在deb网址下&#xff0c;下载Doc…

知识点:代理设计模式

1.场景设定和问题复现 1 准备项目 pom.xml <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.3.1</version> <scope>test</scope></dependen…

兰迪·舍克曼担任生命银行链(LBC)顾问,赋能基因数据区块链技术发展

兰迪舍克曼&#xff08;Randy Schekman&#xff09;作为生命银行链&#xff08;Life Bank Chain, LBC&#xff09;的顾问参与其中&#xff0c;这无疑是个令人兴奋的消息&#xff01;他在生理医学和基因研究方面拥有深厚的专业知识&#xff0c;必将对LBC的使命&#xff0c;即安全…

10-14到10-16学习笔记

mybatis-plus设置逻辑删除 1.配置全局的逻辑删除规则&#xff08;高版本可以省略&#xff09; 2.配置逻辑删除的组件bean(高版本可以省略) 3.给实体类的属性加上逻辑删除TableLogic注解 Element-ui的Dialog 对话框使用 <el-dialog :title"title" :visible.sync…

FPGA实现SPI接口,用verilog实现,SPI接口使用例程!!!

SPI接口详解 SPI&#xff08;Serial Peripheral Interface&#xff09;是一种高速、全双工、同步的通信总线。它常用于连接微控制器和各种外围设备&#xff0c;如EEPROM、FLASH、AD转换器等。SPI接口主要具有以下优点&#xff1a; 全双工通信&#xff1a;支持同时发送和接收数…

【Java并发编程】线程池的四种拒绝策略(饱和策略)

引入 线程池的拒绝策略是当线程池出现以下情况时&#xff0c;由于线程池达到其容量上限而无法接受新任务时的处理机制&#xff1a; 线程池已满&#xff1a;当线程池中的所有线程都在执行任务时&#xff0c;新提交的任务无法立即执行。这种情况发生在当前线程池的核心线程和最…