版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/iov3Rain/article/details/90243370
题目描述
现在我们要读入一串数,同时要求在读入每个数的时候算出它的秩,即在当前数组中小于等于它的数的个数(不包括它自身),请设计一个高效的数据结构和算法来实现这个功能。
给定一个int数组A,同时给定它的大小n,请返回一个int数组,元素为每次加入的数的秩。保证数组大小小于等于5000。
测试样例:
[1,2,3,4,5,6,7],7
返回:[0,1,2,3,4,5,6]
利用插入排序的思想
也可以用map或者set,因为底层使用红黑树实现的,红黑树是有序的。
用set时,用upper_bound来查找。
class Rank {
public:
vector<int> getRankOfNumber(vector<int> A, int n) {
// write code here
vector<int> res(n, 0);
for(int i = 1; i < n; ++i)
{
int temp = A[i];
int j;
for(j = i - 1; j >= 0; --j)
{
if(A[j] < temp)
break;
A[j + 1] = A[j];
}
res[i] = j + 1;
A[j + 1] = temp;
}
return res;
}
};