当前位置: 首页 > news >正文

【华为上机真题 2022】| 差点没过


🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀

🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


目录

一、题目描述

1.1 输入描述

1.2 输出描述

1.3 示例 1

1.4 示例 2

二、解题思路

三、算法实现

四、时间复杂度


注意:题目来源于网络用户分享,本文仅分享做题思路和方法,如有侵权请联系我删除!

一、题目描述

        某探险队负责对地下洞穴进行探险。探险队成员在进行探险任务时,随身携带的记录器会不定期地记录自身的坐标,但在记录的间隙中也会记录其他数据。探索工作结束后,探险队需要获取到某成员在探险过程中相对于探险队总部的最远的足迹位置。

        仪器记录坐标时,坐标的数据格式为(x, y),如(1,2)、(100,200),其中0<x<1000,0<y<1000。同时存在非法坐标,如(01,1)、(1,01),(0,100)属于非法坐标。

        设定探险队总部的坐标为(0,0),某位置相对总部的距离为:xx+yy。若两个座标的相对总部的距离相同,则第一次到达的坐标为最远的足迹。若记录仪中的坐标都不合法,输出总部坐标(0,0)。

备注:不需要考虑双层括号嵌套的情况,比如sfsdfsd((1,2))。

1.1 输入描述

字符串,表示记录仪中的数据。

如:ferga13fdsf3(100,200)f2r3rfasf(300,400)

1.2 输出描述

字符串,表示最远足迹到达的坐标。

如: (300,400)

1.3 示例 1

输入

ferg(3,10)a13fdsf3(3,4)f2r3rfasf(5,10)

输出

(5,10)

说明:记录仪中的合法坐标有3个: (3,10), (3,4), (5,10),其中(5,10)是相距总部最远的坐标, 输出(5,10)。

1.4 示例 2

输入

asfefaweawfaw(0,1)fe

输出

(0,0)

说明:记录仪中的坐标都不合法,输出总部坐标(0,0)

二、解题思路

本题是一道模拟题,遍历输入的字符串,分隔字符串中的坐标,排除非法坐标,计算最大值的坐标,输出即可。

三、算法实现

代码实现如下所示。

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

/***
 * 处理括号里的内容
 */
int solve(string str, pair<int, int>& ans) {
    int idx = str.find(',');
    string strX = str.substr(0, idx);
    string strY = str.substr(idx+1, str.size());
    if (!strX.size() || !strY.size()) { //存在坐标为空的情况
        return -1;
    }
    if (strX.size() > 0 && strX[0] == '0') { // 包含前导 0,或只有 0
        return -1;
    }
    if (strY.size() > 0 && strY[0] == '0') { // 包含前导 0,或只有 0
        return -1;
    }
    ans = {stoi(strX), stoi(strY)};
    return ans.first + ans.second;
}

int main()
{
    string str;
    while (cin>>str) {
        int n = str.size();
        int Max = 0;
        pair<int, int> ans;
        for (int i = 0; i < n; ++i) {
            if (str[i] == '(') { // 处理括号,注意:没有括号嵌套的情况
                int j = i + 1;
                while (j < n && str[j] != ')') {
                    j++;
                }
                string coord = str.substr(i+1, j-i-1);
                pair<int, int>tmp(0, 0);
                int ret = solve(coord, tmp);
                if (Max < ret) {
                    Max = ret;
                    ans = tmp;
                }
            }
        }
        cout<<"("<<ans.first<<","<<ans.second<<")"<<endl;
    }
    return 0;
}

四、时间复杂度

时间复杂度:O(n)

其中,n 为字符串的长度,在上述代码中,只需要遍历一次即可,所以时间复杂度为 O(n)。


🎈 感觉有帮助记得「一键三连支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞


http://www.dtcms.com/a/70.html

相关文章:

  • 计算机毕业设计(附源码)python余庆金阳驾校管理系统
  • 洛谷千题详解 | P1009 [NOIP1998 普及组] 阶乘之和【C++、Java、Python、Pascal语言】
  • 毕业设计 嵌入式 智能婴儿车
  • Python获取 小黑子 弹幕数据+制作词云分析.........
  • 【C++笔记】第二十五篇 内建函数对象
  • 【C/自定义类型详解】——结构体(struct)、位段、枚举(enum)、联合(union)
  • CSDN 编程竞赛·第八期总结
  • 如何搭建网课搜题公众号
  • MySQL总结
  • 【Web UI自动化测试】Web UI自动化测试之PO篇(全网最全)
  • 什么是跨域
  • 智能优化算法:白鲸优化算法-附代码
  • 【初阶C++】细谈new和delete以及函数与类的模板
  • 【EffectiveC++】让自己习惯C++
  • Python实现websocket接口自动化测试
  • 【Flutter】【widget】Checkbox 和 CheckboxListTile 复选框快速学习一下
  • 二叉搜索树——C++
  • 开发和测试争抢环境?是时候进行多环境建设了
  • 【网络篇】第六篇——网络套接字编程(二)(UDP详解)
  • (最新版2022版)剑指offer之队列 栈题解
  • WinForm应用实战开发指南 - 教你如何实现表头的全选操作?
  • 刷题笔记之三(统计回文+连续最大和+查找组成一个偶数最接近的两个素数+把字符串转换成整数+不要二)
  • 猜数字小游戏(加强版)它来了
  • 学习笔记-常见安全设备渗透方法
  • 《计算机视觉基础知识蓝皮书》第10篇 模型部署基础
  • 机器学习HMM模型
  • Linux系统中利用open函数多次打开同一个文件操作方法
  • React-Router之BrowserRouter 与 HashRouter切分方式和基本概念
  • 【数据结构基础】之数组介绍,生动形象,通俗易懂,算法入门必看
  • 鏖战 Web 性能优化:HTTP