每个案例第一行为此数组元素个数k(4<k<80),第二行是k个整数,每两个整数之间用空格分隔
每个案例输出为n个数字(其中n为该案例中极值点的个数):每个数字对应相应数组的相应极值点下标值,下标值之间用空格分隔。
10 10 12 12 11 11 12 23 24 12 12 15 12 12 122 112 222 211 222 221 76 36 31 234 256 76 76 15 12 14 122 112 222 222 222 221 76 36 31 234 256 76 73
0 7 2 3 4 5 6 10 12 0 2 3 10 12 14
#include<iostream>
using namespace std;
int main(){
int n;
int a[101];
while (cin>>n){
for (int i=1;i<=n;i++)
cin>>a[i];
if (a[1]!=a[2])
cout<<0<<" ";
for (int i=2;i<n;i++)
if ((a[i]>a[i-1]&&a[i]>a[i+1])||(a[i]<a[i-1]&&a[i]<a[i+1]))
cout<<i-1<<" ";
if (a[n-1]!=a[n])
cout<<n-1;
cout<<endl;
}
return 0;
}
#include<iostream> using namespace std; int main(){ int n; while(cin>>n){ int *a=new int[n]; for(int i=0;i<n;i++) cin>>a[i]; int *maxmin=new int[n]; int count=0; for(int i=0;i<n;i++){ if(i==0){ if(a[i]<a[i+1]||a[i]>a[i+1]) maxmin[count++]=i; } else if(0<i&&i<n-1){ if((a[i]<a[i+1]&&a[i]<a[i-1])||(a[i]>a[i+1]&&a[i]>a[i-1])) maxmin[count++]=i; } else if(a[i]<a[i-1]||a[i]>a[i-1]) maxmin[count++]=i; } for(int i=0;i<count;i++){ if(i!=count-1) cout<<maxmin[i]<<' '; else cout<<maxmin[i]; } cout<<endl; } }
def filterPeak(arr):
a = list(
filter(lambda i: (arr[i] < arr[i - 1] and arr[i] < arr[i + 1]) or (arr[i] > arr[i - 1] and arr[i] > arr[i + 1]),
range(1, len(arr) - 1)))
b = [0] if arr[0] != arr[1] else []
c = [len(arr) - 1] if arr[-2] != arr[-1] else []
return b + a + c
a, b = input(), list(map(int, input().split()))
print(" ".join(map(str, filterPeak(b))))
#include<stdio.h> #include<vector> using namespace std; int main(){ int n; scanf("%d",&n); for(int i=0;i<n;i++){ int size; scanf("%d",&size); vector<int> vec(size,0); for(int j=0;j<size;j++){ scanf("%d",&vec[j]); } vector<int> result; if(size>1){ if(vec[0]>vec[1]||vec[0]<vec[1]) result.push_back(0); } for(int j=1;j<size-1;j++){ if((vec[j-1]<vec[j]&&vec[j]>vec[j+1])||(vec[j-1]>vec[j]&&vec[j]<vec[j+1])){ result.push_back(j); } } if(size>1){ if(vec[size-1]>vec[size-2]||vec[size-1]<vec[size-2]){ result.push_back(size-1); } } for(int j=0;j<result.size()-1;j++){ printf("%d ",result[j]); } printf("%d\n",result[result.size()-1]); } return 0; }
#include<iostream> using namespace std; int main(){ int n; while(cin>>n){ int a[n]; for(int i=0;i<n;i++){ cin>>a[i]; } if(a[0]!=a[1]){ cout<<0<<" "; } for(int i=1;i<n-1;i++){ if(a[i-1]<a[i]&&a[i]>a[i+1]){ cout<<i<<" "; } if(a[i-1]>a[i]&&a[i+1]>a[i]){ cout<<i<<" "; } } if(a[n-1]!=a[n-2]){ cout<<n-1; } cout<<endl; } }//通俗易懂 首尾判断是否和相邻的相等 不相等就一定是极值点直接输出 然后循环判断内部的
#include<bits/stdc++.h> //万能头 #include<iostream> #include<cstdio> #include<algorithm> #include<string> using namespace std; int main(){ int n; while(scanf("%d",&n)!=EOF) { int a[n]; for(int i=0;i<n;i++) { scanf("%d",&a[i]); } for(int i=0;i<n;i++) { if(i==0) { if(a[i]!=a[i+1]) { printf("%d ",i); } } else if(i==n-1) { if(a[i]!=a[i-1]) { printf("%d ",i); } } else { if( (a[i]<a[i-1]&&a[i]<a[i+1]) || (a[i]>a[i-1]&&a[i]>a[i+1]) ) { printf("%d ",i); } } } printf("\n"); } return 0; }
#include<stdio.h> int main() { int n,i,a[80]; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++)//输入 scanf("%d",&a[i]); for(i=0;i<n;i++)//比较 { if((i==0&&a[i]!=a[i+1])||(i==n-1&&a[i]!=a[i-1]))//最前最后两个数特殊处理 {printf("%d ",i);continue;} if((a[i]>a[i-1]&&a[i]>a[i+1])||(a[i]<a[i-1]&&a[i]<a[i+1])) printf("%d ",i); } printf("\n"); } }
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()){ int n = scanner.nextInt(); int[] a = new int[n]; for (int i = 0; i <n ; i++) a[i]= scanner.nextInt(); System.out.print(0+" "); for (int i = 1; i < n-1; i++) if ((a[i]<a[i-1]&&a[i]<a[i+1])||(a[i]>a[i-1]&&a[i]>a[i+1])) System.out.print(i+" "); System.out.println(n-1); } } }
#include<iostream> using namespace std; int main() { int k; while (cin >> k) { int* a = new int[k]; for (int i = 0; i < k; i++) cin >> a[i]; for (int i = 0; i < k; i++) { if (i == 0 && a[i] != a[i + 1]) { cout << i << " "; continue; } else if (i == k-1 && a[i] != a[i - 1]) { cout << i << " "; continue; } else if ((a[i] < a[i - 1] && a[i] < a[i + 1]) || (a[i] > a[i - 1] && a[i] > a[i + 1])) cout << i << " "; } delete []a; cout << endl; } return 0; }
try: while True: num,digitNum,result = int(input()),list(map(int,input().split())),[] if digitNum[0] != digitNum[1]: result.append(0) for i in range(1,num-1): if digitNum[i-1] < digitNum[i] > digitNum[i+1] or digitNum[i-1] > digitNum[i] < digitNum[i+1]: result.append(i) if digitNum[-1] != digitNum[-2]: result.append(num-1) print(" ".join(map(str,result))) except Exception: pass
#include<iostream> #include<cstdio> using namespace std; const int maxn = 82; int num[maxn]; int main() { int t; int n; cin >> t; while(t--) { cin >> n; for(int i = 0; i < n; ++i) { cin >> num[i]; } // 判断 int flag0 = 0; // 标志输出空格 ' ' int flag1 = 0; // 标志是否为极值点 for(int i = 0; i < n; ++i) { flag1 = 0; if(i == 0 && num[i] != num[i+1]) // i == 0 { flag1 = 1; } else if(i == n-1 && num[i] != num[i-1]) // i == n-1 { flag1 = 1; } else if((num[i] > num[i-1] && num[i] > num[i+1]) || (num[i] < num[i-1] && num[i] < num[i+1])) { flag1 = 1; } if(flag1 == 1) { if(flag0++) { cout << " "; } cout << i; } } // end 判断 cout << endl; } return 0; }
#include<bits/stdc++.h>
int main(){
int n,a[80];
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
for(int i=0;i<n;i++)
if(i==0 && a[i]!=a[i+1])
printf("%d ",i);
else if(i==n-1 && a[i]!=a[i-1])
printf("%d\n",i);
else if(a[i]<a[i+1] && a[i]<a[i-1] || a[i]>a[i+1] && a[i]>a[i-1])
printf("%d ",i);
}
}
#include <iostream> using namespace std; int a[100]; int b[100]={0};//记录下标为i的极值点 int main() { int k;//k个元素 while(cin>>k){ for(int i=0;i<k;i++){ cin>>a[i]; } for(int i=0;i<k;i++){ if(i==0&&a[i]!=a[i+1]){ b[i]=1; } else if(i==0&&a[i]==a[i+1]) continue; else if(i==k-1&&a[i]!=a[i-1]){ b[i]=1; } else if(i==k-1&&a[i]==a[i-1]) continue; else if((a[i]>a[i-1]&&a[i]>a[i+1])||(a[i]<a[i-1]&&a[i]<a[i+1])){ b[i]=1; } } for(int i=0;i<90;i++){ if(b[i]==1) cout<<i<<' '; } cout<<endl; } }
#include<iostream> #include<vector> using namespace std; int main() { int N = 0; cin >> N; vector<int>Array; Array.reserve(N); for (int i = 0; i < N; ++i) { int input; cin >> input; Array.emplace_back(input); } if (Array[0] != Array[1]) { cout << 0 << " "; } for (int i = 1; i < N - 1; ++i) { if ((Array[i] < Array[i + 1] && Array[i] < Array[i - 1]) || (Array[i] > Array[i + 1] && Array[i] > Array[i - 1])) { cout << i << " "; } } if (Array[N] != Array[N - 1]) { cout << N - 1 << " "; } }
#include <iostream> #include <algorithm> using namespace std; int main() { int n,A[100]; cin >> n; for (int i = 0; i < n; i++) { cin >> A[i]; } if (A[0] > A[1] || A[0] < A[1]) cout << 0<<" "; for (int i = 1; i < n-1; i++) { if (A[i] > A[i + 1] && A[i] > A[i - 1] || A[i] < A[i - 1] && A[i] < A[i + 1]) { cout << i<<" "; } } if (A[n-1] > A[n-2] || A[n-1] < A[n-2]) cout << n-1<<" "; return 0; }