C++笔试强训day7

news2025/1/17 6:11:57

目录

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

2.岛屿数量

3.拼三角


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

链接

我的思路很简洁,就是双指针遍历,然后不断更新左位置left和右位置right和长度len。

然后我写代码的时候代码思路没跟上原本思路,直接把所有的l,r,len都存起来,然后最后再遍历一遍存起来的数。

回想起才发现思路清晰了,但是代码写的一塌糊涂,其实可以直接在遍历的过程中不断更新l,r,len就可以了。

一开始代码(可以通过,但是繁琐):

#include <iostream>
#include <vector>
using namespace std;
vector<pair<int, int>> vp(256);
int main() {
    string s;
    cin >> s;
    int l = 0, r = 0;
    int k = 0;
    while (r < s.size()) {
        while (!(s[l] >= '0' && s[l] <= '9')) {
            l++;
        }
        r = l;
        while (s[r] >= '0' && s[r] <= '9') {
            r++;
        }
        vp[k++] = { l, r - 1 };
        l = r;
    }
    int len = 0;
    int keyi = 0;
    for (int i = 0; i < k; ++i) {
        if ((vp[i].second - vp[i].first + 1) > len) {
            len = vp[i].second - vp[i].first + 1;
            keyi = i;
        }
    }
    string t(s.begin() + vp[keyi].first, s.begin() + vp[keyi].second + 1);
    cout << t << endl;
    return 0;
}

改进代码(相当于我改进思路的再改进,因为可以不用不存储右指针,因为有了左和长度就可以判断右):

#include <iostream>
#include <string>
using namespace std;
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)
            {
                begin = i;
                len = j - i;
            }
            i = j;
        }
    }

    if (begin == -1) 
        cout << "" << endl;
    else 
        cout << s.substr(begin, len) << endl;
    return 0;
}

这样不仅代码简洁,而且看起来也舒服。

begin初始化为负 -1 是为了判断有没有更新过

2.岛屿数量

链接

非常经典的一道DFS题目。

因为我见了很多DFS的题目返回值都为bool,因此我认为DFS必须以bool作返回值,结果导致浪费很多时间还得不到成果。

用不着返回值,直接深度遍历就可以求值:

class Solution {
  public:

    bool vis[220][220];
    int rowCount;
    int colCount;
    int dx[4] = {0,0,1,-1};
    int dy[4] = {1,-1,0,0};

    int solve(vector<vector<char>>& grid) {
        rowCount = grid.size();
        colCount = grid[0].size();

        // 用来记录岛屿数量
        int num_islands = 0;
        for (int row = 0; row < rowCount; row++) {
            for (int col = 0; col < colCount; col++) {
                // 如果当前位置是岛屿的一部分
                if (grid[row][col] == '1' && !vis[row][col]) {
                    // 从当前位置开始执行DFS, 标记整个岛屿
                    DFS(grid, row, col);
                    // 岛屿数量增加
                    num_islands++;
                }
            }
        }
        return num_islands;
    }

    void DFS(vector<vector<char>>& grid, int row, int col) {
        // 将当前位置标记为'0', 表示已访问
        vis[row][col] = true;
        // 检查并递归访问当前点的上下左右四个相邻点
        for(int i = 0; i < 4; ++i)
        {
            int x = row + dx[i];
            int y = col + dy[i];

            if(x >= 0 && x < rowCount && y >= 0 && y < colCount && !vis[x][y] && grid[x][y] == '1')
                DFS(grid, x, y);
        }
    }
};

3.拼三角

链接

因为只有六根棍子,直接排序后分类讨论即可:

我没有经过思考,所有就把所有情况都遍历了,真的很傻的行为,虽然过了,但是很繁琐嘞,太多情况了。

自己代码:

#include <algorithm>
#include <iostream>
#include <vector>
#define int long long
using namespace std;
bool Check(int a, int b, int c)
{
    int min1 = min(a, min(b, c)); // 最小
    int max1 = max(a, max(b, c)); // 最大
    int mid = a + b + c - min1 - max1;
    if (min1 + mid <= max1)
        return false;
    return true;
}
vector<int> v(6);
void solve()
{
    for (int i = 0; i < 6; ++i)
    {
        cin >> v[i];
    }
    sort(v.begin(), v.end());
    if (Check(v[0], v[1], v[2]))
    {
        if (Check(v[3], v[4], v[5]))
        {
            cout << "Yes" << endl;
            return;
        }
    }
    if (Check(v[1], v[2], v[3]))
    {
        if (Check(v[0], v[4], v[5]))
        {
            cout << "Yes" << endl;
            return;
        }
    }
    if (Check(v[2], v[3], v[4]))
    {
        if (Check(v[0], v[1], v[5]))
        {
            cout << "Yes" << endl;
            return;
        }
    }
    if (Check(v[0], v[2], v[5]))
    {
        if (Check(v[1], v[3], v[4]))
        {
            cout << "Yes" << endl;
            return;
        }
    }
    if (Check(v[0], v[2], v[4]))
    {
        if (Check(v[1], v[3], v[5]))
        {
            cout << "Yes" << endl;
            return;
        }
    }
    if (Check(v[0], v[2], v[3]))
    {
        if (Check(v[1], v[4], v[5]))
        {
            cout << "Yes" << endl;
            return;
        }
    }
    if (Check(v[0], v[1], v[3]))
    {
        if (Check(v[2], v[4], v[5]))
        {
            cout << "Yes" << endl;
            return;
        }
    }
    if (Check(v[0], v[1], v[4]))
    {
        if (Check(v[2], v[3], v[5]))
        {
            cout << "Yes" << endl;
            return;
        }
    }
    if (Check(v[0], v[3], v[4]))
    {
        if (Check(v[1], v[2], v[5]))
        {
            cout << "Yes" << endl;
            return;
        }
    }
    if (Check(v[0], v[3], v[5]))
    {
        if (Check(v[1], v[2], v[4]))
        {
            cout << "Yes" << endl;
            return;
        }
    }
    cout << "No" << endl;
}
signed main() {
    int t;
    cin >> t;
    while (t--)
        solve();
}

优化代码(只剩四种情况):

#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;
        }
        else cout << "No" << endl;
    }

    return 0;
}

因为是排序过后的,所以只需要遍历包含第一个数在内的四种情况即可。

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

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

相关文章

实验七 智能手机互联网程序设计(微信程序方向)实验报告

请编写一个用户登录界面&#xff0c;提示输入账号和密码进行登录&#xff0c;要求在输入后登陆框显示为绿色&#xff1b; 二、实验步骤与结果&#xff08;给出对应的代码或运行结果截图&#xff09; index.wxml <view class"content"> <view class"a…

链表与模拟LinkedList的实现

1. ArrayList的缺陷 ArrayList底层使用数组来存储元素 由于其底层是一段连续空间&#xff0c;当在ArrayList任意位置插入或者删除元素时&#xff0c;就需要将后序元素整体往前或者往后 搬移&#xff0c;时间复杂度为O(n)&#xff0c;效率比较低。因此ArrayList不适合做任意位…

大数据—数仓分层概论

数据仓库&#xff08;Data Warehouse&#xff09;是一个用于集成和存储大量数据的系统&#xff0c;旨在支持企业的决策制定过程。它是一个面向主题的、集成的、非易失的数据集合&#xff0c;用于支持管理决策制定过程。数据仓库的发展源于企业对数据分析和决策支持的需求&#…

【skill】usbwebserver的几个问题

试了几个云服务器&#xff08;华为云、移动10086云&#xff09;&#xff0c;使用usbwebserver均会出现问题。 以前都是找缺少的对应的dll文件&#xff0c;不仅搜索半天、解压、移动复制、同时还要考虑文件的位数 有人说C:\Windows\System32存放的是64位的东西有人说C:\Windows…

#天空星硬件SPI驱动GD25Q64

一、使用方式及接线&#xff1a; 硬件SPI&#xff0c;软件片选CS&#xff08;PA4&#xff09; STM32F407&#xff08;主机&#xff09; GD25Q322&#xff08;从机&#xff09; 说明 PA4&#xff08;SPI1_NSS&#xff09; CS(NSS) 片选线 PA5&#xff08;SPI1_SCK&#x…

以场景驱动CMDB数据治理经验分享

数据治理是 CMDB 项目实施中难度最大、成本最高的环节&#xff0c;是一个长期治理的过程&#xff0c;而行业很少提出 CMDB 数据治理的技术实现方案。CMDB 数据治理不仅需要解决配置管理工程性的技术问题&#xff0c;还要基于运维组织的特点&#xff0c;建立适应性的配置运营能力…

【Unity动画系统】动画状态基本属性与相关API、IK简单概述

动画状态基本属性与相关API Tag&#xff1a;判断是否当前播放着相对应Tag的动画&#xff0c;如果是&#xff0c;那么玩家的输入就是无效的。 using UnityEngine.InputSystem;public AnimatorStateInfo stateInfo;void State(){//stateInfo animator.GetCurrentAnimatorStateIn…

Kafka 3.x.x 入门到精通(04)——对标尚硅谷Kafka教程

Kafka 3.x.x 入门到精通&#xff08;04&#xff09;——对标尚硅谷Kafka教程 2. Kafka基础2.1 集群部署2.2 集群启动2.3 创建主题2.4 生产消息2.5 存储消息2.5.1 存储组件2.5.2 数据存储2.5.2.1 ACKS校验2.5.2.2 内部主题校验2.5.2.3 ACKS应答及副本数量关系校验2.5.2.4 日志文…

EOCR-i3MS-WRDUW电机保护器 韩国三和 进口施耐德

韩国三和&#xff0c;EOCR&#xff0c;SAMWHA&#xff0c;Schneider&#xff0c;施耐德&#xff0c;电机保护器&#xff0c;电动机保护器&#xff0c;电子式电动机保护继电器&#xff0c;电子式过电流继电器&#xff0c;电子式欠电流继电器&#xff0c;电子式电压继电器&#x…

Windows10系统安装IIS的步骤

在Windows 10上安装IIS的步骤如下&#xff1a;12 打开控制面板&#xff0c;选择“程序”或“程序和功能”。点击“启用或关闭Windows功能”。在列表中找到“Internet Information Services”&#xff0c;勾选该选项。根据需要勾选IIS的具体组件&#xff0c;如万维网服务、IIS可…

11 c++版本的贪吃蛇

前言 呵呵 这大概是 大学里面的 c 贪吃蛇了吧 有一些 面向对象的理解, 但是不多 最近 因为想要 在单片机上面移植一下 贪吃蛇, 所以 重新拿出了一下 这份代码 然后 将它更新为 c 版本, 还是 用了一些时间 这里 具体的实现 就不赘述, 仅仅是 发一下代码 以及 具体的使用…

Linux实验一:Linux环境及编程工具

目录 一、实验目的二、实验内容三、参考代码四、实验步骤步骤1. 编辑源代码test1.c步骤2. 编译源代码test1.c步骤3. 调试test1步骤4. 重新编译运行test1.c 五、实验结果六、实验总结 一、实验目的 1、掌握Linux C开发过程中的基本概念&#xff1b; 2、掌握如vim&#xff0c;GC…

go语言实现简单登陆返回token样例

目录 1、代码实现样例&#xff1a; 2、postman调用&#xff0c;获取登陆后的token&#xff1a; 1、代码实现样例&#xff1a; package mainimport ("net/http""time""github.com/dgrijalva/jwt-go""github.com/gin-gonic/gin" )var …

深度学习系列66:试穿模型IDM-VTON上手

1. 模型概述 如图&#xff0c;总体流程为&#xff1a; 输入为&#xff1a;衣服的编码xg&#xff1b;人物noise的编码xt&#xff1b;人物身上衣物的mask和人体pose分割(densepose)&#xff1b;衣服部分经过两部分网络&#xff1a;1&#xff09;高级语义网络IP-Adapter&#xff…

谷歌搜索留痕怎么做?

使用GLB外推技术&#xff0c;一个能让你的网站或者你的产品在谷歌上排名的神器 GLB外推&#xff0c;是利用先进的SEO技术&#xff0c;特别是光算科技的谷歌搜索留痕霸屏外推&#xff0c;来帮助你的产品或服务在谷歌上获得更高的曝光度&#xff0c;这项技术能让你的业务关键词在…

阿里云企业邮箱API的使用方法?调用限制?

阿里云企业邮箱API性能如何优化&#xff1f;配置邮箱API的优势&#xff1f; 阿里云企业邮箱以其稳定、高效和安全的特点&#xff0c;受到了众多企业的青睐。而阿里云企业邮箱API的开放&#xff0c;更是为企业提供了更加灵活、便捷的管理和操作方式。下面&#xff0c;我AokSend…

安装VMware后的相关配置

一、创建完虚拟机后 看看虚拟机设置里面的DVD&#xff1b;有没有自动检测到 二、打开虚拟机后 一直点击继续3、完成后进行重新下载VM——tools 来进行跨机子的复制粘贴&#xff0c;和屏幕大小的自适应注意:如果安装不了tools是灰色的 点开虚拟机设置——两个光盘都选用物理驱…

如何通过安全数据传输平台,保护核心数据的安全传输?

在数字化的浪潮中&#xff0c;企业的数据安全传输显得尤为关键。随着网络攻击手段的日益复杂&#xff0c;传统的数据传输方式已不再安全&#xff0c;这就需要我们重视并采取有效的措施&#xff0c;通过安全数据传输平台来保护核心数据。 传统的数据传输面临的主要问题包括&…

matlab批量读取csv文件

matlab如何批量读取csv文件 在Matlab中&#xff0c;有多种方法可以批量读取CSV文件。下面是几种常用的实现方法&#xff1a; 方法一&#xff1a;使用dir函数获取文件列表 folder 文件夹路径; files dir(fullfile(folder, *.csv)); numFiles length(files);for i 1:numFi…

通往AGI路上,DPU将如何构建生成式AI时代的坚实算力基石?

4月19日&#xff0c;在以“重构世界 奔赴未来”为主题的2024中国生成式AI大会上&#xff0c;中科驭数作为DPU新型算力基础设施代表&#xff0c;受邀出席了中国智算中心创新论坛&#xff0c;发表了题为《以网络为中心的AI算力底座构建之路》主题演讲&#xff0c;勾勒出在通往AGI…