https://pintia.cn/problem-sets/994805260223102976/problems/994805278589960192
这道题:
开始没思路,就暴力嘛,遍历每一位数进行判断,for循环
里套了两个for循环,直接超时,但还能得一半分。
思路:
主元的位置与排序后该元素的位置相同,而且还必须满足后面
的大于前面的(还有个坑是当主元个数为0时应该换行输出)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n=0;
scanf("%d",&n);
long long a[n];
long long b[n]; //复制一份到b数组中
long long c[n];//存储主元
int k=0;
for(int i=0;i<n;i++)
{
scanf("%lld",&a[i]);
b[i]=a[i];
}
sort(b,b+n);
int max=0;
for(int i=0;i<n;i++)
{
if(a[i]>max)
{
max=a[i];
}
if(a[i]==b[i] && a[i]>=max)//不仅相等还必须是最大值
{
c[k]=a[i];
k++;
}
}
if(k==0) cout<<k<<endl<<endl;
else
{
sort(c,c+k);
cout<<k<<endl;
for(int i=0;i<k;i++)
{
cout<<c[i];
if(i!=k-1)
cout<<" ";
}
}
}
06-20
3920