快手笔试
就ac了前两题,前两题很简单,感觉应该就能过来,就没看后两题了。
1. 一个数组,输出每一个位置i与i前面比他大的数的最小距离。就最简单的暴力破解。
2. 一个数组,如果对第i个位置来说, [0, i-1]只有一个比他大的数,就输出i.输出所有符合情况的i,若没有输出-1.
要求算法复杂度为n;
#include<iostream>
#include<string>
#include<vector>
#include<iterator>
#include<algorithm>
using namespace std;
int main(){
vector<int> arr;
int a;
while(cin >> a)
arr.push_back(a);
int Max = 0, secondM = 0;
int count = 0;
if(arr.size() >= 2){
if(arr[0] > arr[1]){
cout << 1 << " ";
count++;
}
Max = max(arr[0], arr[1]);
secondM = min(arr[0], arr[1]);
}
for(int i = 2; i < arr.size(); i++){
if(arr[i] < Max && arr[i] >= secondM){
cout << i << " ";
secondM = arr[i];
count++;
}else if(arr[i] > Max){
secondM = Max;
Max = arr[i];
}
}
if(count == 0)
print(-1);
}
查看18道真题和解析