大厂真题:【哈希表】美团2023秋招-小美的排列询问

题目描述与示例

题目描述

小美拿到了一个排列。她想知道在这个排列中,xy是否是相邻的。你能帮帮她吗?

排列是指一个长度为n的数组,其中 1n 每个元素恰好出现一次。

输入描述

第一行输入一个正整数n,代表排列的长度。

第二行输入n个正整数ai,代表排列的元素。

第三行输入两个正整数xy,用空格隔开。

1 <= n <= 2*10^5
1 <= ai, x, y <= n
x != y

输出描述

如果xy在排列中相邻,则输出"Yes"。否则输出"No"

示例一

输入

4
1 4 2 3
2 4

输出

Yes

示例二

输入

5
3 4 5 1 2
3 2

输出

No

解题思路

简单题,一次遍历数组,判断是否有和xy相等并且相连即可。

可优化逻辑:因为xy是后输入的,必须存储整个数组,但是上面说了 **排列是指一个长度为n的数组,其中 1 到n 每个元素恰好出现一次。**可以充分利用该信息创建一个大小为n+1的数组存储各个元素的所在位置,这样最终直接判断xy所在位置差是否为1即可判断结果。

代码

解法一:哈希表

Python

# 题目:【哈希表】美团2023秋招-小美的排列询问
# 作者:闭着眼睛学数理化
# 算法:哈希表
# 代码有看不懂的地方请直接在群上提问n = int(input())
nums = list(map(int, input().split()))
x, y = map(int, input().split())
# 构建哈希表,用哈希表储存x和y的下标
dic = dict()# 遍历整个数组,记录x和y的下标
for i, num in enumerate(nums):if num == x or num == y:dic[num] = i# 若下标差的绝对值为1,则说明相邻,输出"Yes",否则输出"No"
if abs(dic[x] - dic[y]) == 1:print("Yes")
else:print("No")

Java

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();//int[] arr = new int[n];//map 记录每个元素所在的位置int[] map = new int[n+1];for (int i = 0; i < n; i++) {int ai = scanner.nextInt();map[ai] = i;}int x = scanner.nextInt();int y = scanner.nextInt();if(Math.abs(map[x]-map[y])==1){System.out.println("Yes");return;}System.out.println("No");}
}

C++

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;int main() {int n;cin >> n;vector<int> arr(n);vector<int> map(n + 1, 0);for (int i = 0; i < n; i++) {cin >> arr[i];map[arr[i]] = i;}int x, y;cin >> x >> y;if (abs(map[x] - map[y]) == 1) {cout << "Yes" << endl;} else {cout << "No" << endl;}return 0;
}

时空复杂度

时间复杂度:O(n)。一次遍历数组。

空间复杂度:O(``n``)。哈希表所占空间。

解法二:直接模拟

Python

n = int(input())
arr = list(map(int, input().split()))
x, y = map(int, input().split())for i in range(n - 1):if (arr[i] == x and arr[i + 1] == y) or (arr[i] == y and arr[i + 1] == x):print("Yes")break
else:print("No")

Java

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int[] arr = new int[n];for (int i = 0; i < n; i++) {arr[i] = scanner.nextInt();}int x = scanner.nextInt();int y = scanner.nextInt();for (int i = 0; i < n - 1; i++) {if ((arr[i] == x && arr[i + 1] == y) || (arr[i] == y && arr[i + 1] == x)) {System.out.println("Yes");return;}}System.out.println("No");}
}

C++

#include <iostream>
using namespace std;int main() {int n;cin >> n;int arr[n];for (int i = 0; i < n; i++) {cin >> arr[i];}int x, y;cin >> x >> y;for (int i = 0; i < n - 1; i++) {if ((arr[i] == x && arr[i + 1] == y) || (arr[i] == y && arr[i + 1] == x)) {cout << "Yes" << endl;return 0;}}cout << "No" << endl;return 0;
}

时空复杂度

时间复杂度:O(n)。一次遍历数组。

空间复杂度:O(1)。无需额外空间。

华为OD算法/大厂面试高频题算法练习冲刺训练

  • 华为OD算法/大厂面试高频题算法冲刺训练目前开始常态化报名!目前已服务100+同学成功上岸!

  • 课程讲师为全网50w+粉丝编程博主@吴师兄学算法 以及小红书头部编程博主@闭着眼睛学数理化

  • 每期人数维持在20人内,保证能够最大限度地满足到每一个同学的需求,达到和1v1同样的学习效果!

  • 60+天陪伴式学习,40+直播课时,300+动画图解视频,300+LeetCode经典题,200+华为OD真题/大厂真题,还有简历修改、模拟面试、专属HR对接将为你解锁

  • 可上全网独家的欧弟OJ系统练习华子OD、大厂真题

  • 可查看链接 OD算法冲刺训练课程表 & OD真题汇总(持续更新)

  • 绿色聊天软件戳 od1336了解更多

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

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

相关文章

【复杂网络建模】——基于关联矩阵构建超图网络

目录 一、复杂网络介绍 二、常规的构建方法 三、基于关联矩阵构建超图 一、复杂网络介绍 复杂网络是指由大量相互连接的元素或节点构成的网络,这些节点之间的连接关系通常是非常复杂和多样化的。这种网络结构通常用图论来表示,其中节点表示网络中的个体或元素,边表示它们…

Python开源项目PGDiff——人脸重建(Face Restoration),模糊清晰、划痕修复及黑白上色的实践

python ansconda 等的下载、安装等请参阅&#xff1a; Python开源项目CodeFormer——人脸重建&#xff08;Face Restoration&#xff09;&#xff0c;模糊清晰、划痕修复及黑白上色的实践https://blog.csdn.net/beijinghorn/article/details/134334021 友情提示&#xff1a; …

CSS3 过度效果、动画、多列

一、CSS3过度&#xff1a; CSS3过渡是元素从一种样式逐渐改变为另一种的效果。要实现这一点&#xff0c;必须规定两相内容&#xff1a;指定要添加效果的CSS属性&#xff1b;指定效果的持续时间。如果为指定持续时间&#xff0c;transition将没有任何效果。 <style> div…

Ubuntu(WSL2) 安装最新版的 cmake

Ubuntu(WSL) 安装最新版的 cmake 具体流程如下&#xff1a; 步骤一&#xff1a;卸载原本的 cmake sudo apt-get remove cmake 步骤二&#xff1a; sudo apt-get update sudo apt-get install apt-transport-https ca-certificates gnupg software-properties-common wget 步…

nsd的资料

nsd是一款开源的DNS服务器应用。 近期参与项目过程中&#xff0c;涉及到DNS业务&#xff0c;结果被打的满头包。 虽然在校学习时就知道DNS协议&#xff0c;但从业这么多年&#xff0c;对于DNS协议的理解其实一直处于一知半解的状态。 当前处理问题时&#xff0c;接触到了nsd&am…

Clickhouse 学习笔记(6)—— ClickHouse 分片集群

前置知识&#xff1a; Clickhouse学习笔记&#xff08;5&#xff09;—— ClickHouse 副本-CSDN博客 与副本对比&#xff1a; 副本虽然能够提高数据的可用性&#xff0c;降低丢失风险&#xff0c;但是每台服务器实际上必须容纳全量数据&#xff0c;对数据的横向扩容没有解决 …

Redis学习笔记8:基于springboot的Lettuce redis客户端connectTimeout、timeout、shutdownTimeout

一个对springboot redis框架进行重写&#xff0c;支持lettuce、jedis、连接池、同时连接多个集群、多个redis数据库、开发自定义属性配置的开源SDK <dependency><groupId>io.github.mingyang66</groupId><artifactId>emily-spring-boot-redis</art…

基于工业智能网关的汽车充电桩安全监测方案

近年来&#xff0c;我国新能源汽车产业得到快速发展&#xff0c;电动车产量和销量都在持续增长&#xff0c;不仅国内市场竞争激烈&#xff0c;而且也远销海外&#xff0c;成为新的经济增长点。但与此同时&#xff0c;充电设施的运营却面临着安全和效率的双重挑战。 当前的充电桩…

Linux开发工具之编辑器vim

文章目录 1.vim是啥?1.1问问度娘1.2自己总结 2.vim的初步了解2.1进入和退出2.2vim的模式1.介绍2.使用 3.vim的配置3.1自己配置3.2下载插件3.3安装大佬配置好的文件 4.程序的翻译 1.vim是啥? 1.1问问度娘 1.2自己总结 vi/vim都是多模式编辑器&#xff0c;vim是vi的升级版本&a…

【Excel】补全单元格值变成固定长度

我们知道股票代码都为6位数字&#xff0c;但深圳中小板代码前面以0开头&#xff0c;数字格式时前面的0会自动省略&#xff0c;现在需要在Excel表格补全它。如下图&#xff1a; 这时我们需要用到特殊的函数&#xff1a;TEXT或者RIGHT TEXT函数是Excel中一个非常有用的函数。TEX…

UnRaid安装安装仓库管理系统GreaterWMS

文章目录 0、前言1、安装流程1.1、克隆GreaterWMS项目到UnRaid本地目录1.2、修改项目前后端端口1.3、修改baseurl1.4、修改Nginx.conf配置文件1.5、安装依赖插件1.5.1、Docker Compose Manager插件1.5.2、Python3环境 1.6、创建GreaterWMS容器1.6.1、为前后端启动脚本赋执行权限…

【数据结构】归并排序

#include<iostream>using namespace std;void Merge(int* arr,int left,int right,int mid, int*& tmparr) {int begin1 left, end1 mid;int begin2 mid 1, end2 right;int tmpi left;//下面合并两个数组为一个有序数组&#xff08;升序&#xff09;&#xff1…

Protobuf简介

Protobuf 定义&#xff1a;可序列化的数据交换格式 用途&#xff1a;用于通信协议&#xff08;数据&#xff09;&#xff0c;数据存储等 特点&#xff1a;语言无关&#xff0c;平台无关&#xff0c;高效&#xff0c;扩展性好。 相近产品&#xff1a;XML/JSON 优点&#xff1a;…

Amazon EC2 Serial Console 现已在其他亚马逊云科技区域推出

即日起&#xff0c;交互式 EC2 Serial Console 现也在以下区域推出&#xff1a;中东&#xff08;巴林&#xff09;、亚太地区&#xff08;雅加达&#xff09;、非洲&#xff08;开普敦&#xff09;、中东&#xff08;阿联酋&#xff09;、亚太地区&#xff08;香港&#xff09;…

AI系统ChatGPT源码+详细搭建部署教程+AI绘画系统+支持GPT4.0+Midjourney绘画+已支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

JDBC(二)

第4章 操作BLOB类型字段 4.1 MySQL BLOB类型 MySQL中&#xff0c;BLOB是一个二进制大型对象&#xff0c;是一个可以存储大量数据的容器&#xff0c;它能容纳不同大小的数据。 插入BLOB类型的数据必须使用PreparedStatement&#xff0c;因为BLOB类型的数据无法使用字符串拼接写…

数据结构之红黑树

红黑树的概念 红黑树&#xff08;Red-Black Tree&#xff09;同AVL树一样, 也是一种自平衡的二叉搜索树, 但在每个结点上增加一个存储位表示结点的颜色, 可以是Red或Black, 通过对任何一条从根到叶子的路径上各个结点着色方式的限制, 红黑树确保没有一条路径会比其他路径长出俩…

Git分支以及标签的介绍

目录 一. Git分支 四大环境 使用分支操作 pull拉取远程指定分支以及push推送到远程指定分支 场景应用“分支的新建与合并” 二. Git标签 使用标签操作 一. Git分支 几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来&…

【电路笔记】-节点电压分析和网状电流分析

节点电压分析和网状电流分析 文章目录 节点电压分析和网状电流分析1、节点电压分析1.1 概述1.2 示例 2、网格电流分析2.1 概述2.2 示例 3、总结 正如我们在上一篇介绍电路分析基本定律的文章中所看到的&#xff0c;基尔霍夫电路定律 (KCL) 是计算任何电路中未知电压和电流的强大…

kafka微服务学习

消息中间件对比&#xff1a; 1、吞吐、可靠性、性能 Kafka安装 Kafka对于zookeeper是强依赖&#xff0c;保存kafka相关的节点数据&#xff0c;所以安装Kafka之前必须先安装zookeeper Docker安装zookeeper 下载镜像&#xff1a; docker pull zookeeper:3.4.14创建容器 do…