首页 > 试题广场 >

小美的排列询问

[编程题]小美的排列询问
  • 热度指数:3397 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小美拿到了一个排列。她想知道在这个排列中,xy是否是相邻的。你能帮帮她吗?

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

输入描述:
第一行输入一个正整数n,代表排列的长度。
第二行输入n个正整数a_i,代表排列的元素。
第三行输入两个正整数xy,用空格隔开。
1\leq n \leq 200000
1\leq a_i,x,y \leq n
保证x≠y


输出描述:
如果xy在排列中相邻,则输出"Yes"。否则输出"No"。
示例1

输入

4
1 4 2 3
2 4

输出

Yes
示例2

输入

5
3 4 5 1 2
3 2

输出

No
我直接秒

import sys a = list(map(int, input().split())) # 将一行输入转为整数数组
x, y = map(int, input().split()) # 将一行输入转为两个整数

if abs(a.index(x) - a.index(y)) == 1: # 使用 abs() 计算绝对值
    print('Yes')
else:
    print('No')

编辑于 2024-03-08 23:38:02 回复(1)
python 可以直接运用数组的index查找出x的索引,判断左右两边是否有值等于y即可,不用循环
def sol(n,arr,x,y):
    idx = arr.index(x)
    isNear = 'No'
    if idx-1>0:
        if arr[idx-1] == y:
            isNear = 'Yes'
    if idx+1<n:
        if arr[idx+1] == y:
            isNear = 'Yes'        
    return isNear
    
while 1:
    try:
        n = int(input())
        arr = list(map(int,input().split()))
        x,y = map(int,input().split())
        ans = sol(n,arr,x,y)
        print(ans)
    except:
        break


发表于 2023-10-21 02:31:31 回复(0)
importsys
 
n = sys.stdin.readlines()
 
num = n[1].strip().split()
dic = {}
fori in range(1,len(num)-1):
    ifnum[i] not in dic:
        dic[num[i]] = []
    dic[num[i]].append(num[i-1])
    dic[num[i]].append(num[i+1])
dic[num[0]] = [num[1]]
dic[num[-1]]=[num[-2]]
ifn[2].strip().split()[1] in dic[n[2].strip().split()[0]]:
    print('Yes')
    exit()
print('No')


编辑于 2023-08-18 18:33:51 回复(0)