题目描述
给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。
换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i]。
关于输入
第一行是一个整数 n,表示数组大小。
接下来 n 行,每行表示数组中的一个数。
0 <= n <= 1000, 每个数都在int可以表示的范围内.
关于输出
n 行,每行代表数组中比它小的数的个数。
如果没有要输出的数据,输出"None"。
例子输入
5
8
1
2
2
3
例子输出
4
0
1
1
3
源码实现
#include<iostream>
#include<algorithm>
using namespace std;
bool comp(int a, int b) {
return a > b;
}
int main() {
int a[1000] = { 0 };
int n;
int b[1000] = { 0 };
cin >> n;
int ans[1000] = { 0 };
for (int i = 0; i < n; i++) {
cin >> a[i];
b[i] = i;
}
for (int i = 1; i < n; i++) {
for (int j = n - 1; j >= i; j--) {
if (a[j] > a[j - 1]) {
int t = a[j];
a[j] = a[j - 1];
a[j - 1] = t;
int m = b[j];
b[j] = b[j - 1];
b[j - 1] = m;
}
}
}
int count = n;
for (int i = 0; i < n; i++) {
int k = i;
count--;
while (a[i] == a[i + 1]) {
count--;
i++;
}
for (int j = k; j <= i; j++) {
ans[b[j]] = count;
}
}
if (n==0)
cout << "None";
else {
for (int i = 0; i < n; i++)
cout << ans[i] << endl;
}
return 0;
}