现在有一个数组,请找出数组中每个元素的后面比它大的最小的元素,若不存在则为-1。
给定一个int数组A及数组的大小n,请返回每个元素所求的值组成的数组。保证A中元素为正整数,且n小于等于1000。
[11,13,10,5,12,21,3],7
[12,21,12,12,21,-1,-1]
思路:利用集合,这道题可以变得比较简单。
代码如下:
#include #include #include #include #include #include using namespace std; vector findNext(vector A, int n) { set ss; vector result; for (int i = n - 1; i >= 0; --i) { auto pos = ss.lower_bound(A[i]); if (pos != ss.end() && *pos == A[i]) ++pos; if (pos == ss.end()) { result.push_back(-1); } else { result.push_back(*pos); } ss.insert(A[i]); } reverse(result.begin(), result.end()); return result; } void printVector(vectormat, int n) { for (int j = 0; j v; int m; int temp; while (cin >> m) { v.clear(); for (int j = 0; j > temp; v.push_back(temp); } printVector(findNext(v, m), m); } return 0; }
不懂的可以加我的QQ群:261035036(IT程序员面试宝典
群) 欢迎你的到来哦,看了博文给点脚印呗,谢谢啦~~