如果按照题目正常写的话就只有第一个点能通过,结果超时,后来观察到可以和排好序的数组比较,数字相等的时候才能算,但是也有一半的点是不能通过的,后来,想到了如果有两个相同的数字,那么在排序的过程中,两个数字就是挨着的,那么就没办法与未排序的数组一一对应了,这样就判断一下,需要判断的数字是否比之前的最大值大。
做完以上这些步骤,我觉得应该可以通过了,但是还是有一个点过不去,试了很久,就是要在结尾加换行,不加就有一个点始终过不去。
#include <iostream> #include <bits/stdc++.h> #include <vector> using namespace std; int main() { int n; cin >> n; int a[100001]; int b[100001]; for(int i = 0; i < n; i++) { cin >> a[i]; b[i] = a[i]; } sort(b, b+n); vector<int> v; int max = 0; for(int i = 0; i < n; i++) { if(a[i] == b[i] && b[i] > max) { v.push_back(a[i]); } if(a[i] > max) { max = a[i]; } } cout << v.size() << endl; for(int i = 0; i < v.size(); i++) { cout << v[i]; if(i != v.size() - 1) { cout << " "; } } cout << endl; return 0; }