算法题

给定乱序数组 ,找出数组中所有比左边的所有数大且比右边的所有数小的数字 第一个和最后一个不包括在内

利用一个变量记录每个数左边的最大值和右边的最小值,如果一个数比他左边的最大值大且比右边的最小值小,就是符合规定的数

#include
#include
#include
#include
using namespace std;

typedef long long ll;

const int N=1000005;

int n;
int num[N],m[N],d[N];
int main(){
     
	
	scanf("%d",&n);
	
	for(int i=0;i<n;i++){
     
		scanf("%d",&d[i]);
	}
	
	int maxn=-0x3f3f3f3f;
	for(int i=1;i<n;i++){
     
		maxn=max(maxn,d[i-1]);
		if(d[i]>maxn) num[i]++;
	}
	
	maxn=0x3f3f3f3f;
	for(int i=n-2;i>=0;i--){
     
		maxn=min(maxn,d[i+1]);
		if(d[i]<maxn) num[i]++;
	}
	
	for(int i=0;i<n;i++){
     
		if(num[i]==2){
     
			printf("%d ",d[i]);
		}
	}
	
	return 0;
}

你可能感兴趣的:(算法,算法)