给定一个int正整数数组A及其大小n,请找出数组中每个元素的后面比它大的最小的元素,若不存在则为-1。并返回每个元素对应的值组成的那个数组。保证n小于等于1000。
测试样例:
[11,13,10,5,12,21,3],7
[12,21,12,12,21,-1,-1]
方法一
class NextElement {
public:
vector<int> findNext(vector<int> A, int n) {
// write code here
vector<int> res(n,-1);
for(int i = 0; i < n; i++){
int mi = INT_MAX;
int flag = 0;
for(int j = i+1; j < n; j++){
if(A[j] > A[i]){
mi = min(mi, A[j]);
flag = 1;
}
}
if(flag) res[i] = mi;
}
return res;
}
};
方法二
class NextElement {
public:
vector<int> findNext(vector<int> A, int n) {
// write code here
vector<int> res(n, -1);
set<int> se;
for(int i = n-1; i >= 0; i--){
auto p = se.upper_bound(A[i]);
if(p != se.end()) res[i] = *p;
se.insert(A[i]);
}
return res;
}
};
有关lower_bound()和upper_bound()函数的用法,这位博主的这篇文章解析的很详细:
关于lower_bound( )和upper_bound( )的常见用法_brandong-CSDN博客_lower_bound