快手笔试
就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); }