直接按照题目进行模拟判断即可。
时间复杂度O(N)
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn=2e5+10;
int n;
int x,y;
int a[maxn];
int main(){
std::ios::sync_with_stdio(false);
cin>>n;
for(int i=1;i<=n;++i) cin>>a[i];
cin>>x>>y;
bool flag=false;
for(int i=2;i<=n;++i){
if(a[i-1]==x&&a[i]==y) flag=true;
if(a[i-1]==y&&a[i]==x) flag=true;
}
if(flag){
cout<<"Yes";
}else{
cout<<"No";
}
return 0;
}
n = int(input())
a = list(map(int, input().split()))
x, y = map(int, input().split())
flag = False
for i in range(1, n):
if (a[i - 1] == x and a[i] == y) or (a[i - 1] == y and a[i] == x):
flag = True
break
if flag:
print("Yes")
else:
print("No")
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] a = new int[n + 1];
for (int i = 1; i <= n; ++i) {
a[i] = scanner.nextInt();
}
int x = scanner.nextInt();
int y = scanner.nextInt();
boolean flag = false;
for (int i = 2; i <= n; ++i) {
if ((a[i - 1] == x && a[i] == y) || (a[i - 1] == y && a[i] == x)) {
flag = true;
break;
}
}
if (flag) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
}
给定一个排列,判断里面的x,y 是否相邻
排列是指一个长度为n的数组,其中 1 到n 每个元素恰好出现一次。
第一行输入一个正整数n,代表排列的长度。
第二行输入n个正整数ai,代表排列的元素。
第三行输入两个正整数x和y,用空格隔开。
1≤n≤200000
1≤ai,x,y≤n
保证x=y
如果x和y在排列中相邻,则输出"Yes"。否则输出"No"。
输入
4
1 3 4 2
2 4
输出
Yes
输入
5
1 2 4 3 5
3 2
输出
No