题目:
找到数组中每个元素后面比它大的第一个数,然后求这个元素与后面第一个比他大的数之间的索引间隔,没找到的话返回-1。
解法1:
#include<iostream>
#include<vector>
#include<stack>
using namespace std;
vector<int> FindMaxDistance(vector<int>nums){
vector<int>res(nums.size(),-1);
for(int i = 0; i < nums.size();i++){
for(int j = i + 1; j < nums.size(); j++){
if(nums[j] > nums[i]){
res[i] = j - i;
break;
}else{
j++;
}
}
}
for(int i = 0; i < nums.size(); i++){
cout << res[i] << " ";
}
return res;
}
int main(){
vector<int> num = {6,3, 1, 2, 4, 5};
FindMaxDistance(num);
return 0;
}
解法2:
vector<int> FindMaxDistance(vector<int> &num)
{
int len=num.size();
if(len==0) return {};
vector<int> res(len,-1);
stack<int> notFind;
int i=0;
while(i<len){
if(notFind.empty() || num[notFind.top()]>=num[i]){
notFind.push(i++);
}else{
res[notFind.top()]= i - notFind.top();
notFind.pop();
}
}
for(int i = 0; i < res.size(); i++){
cout << res[i] << " ";
}
return res;
}
|