假设我们有一个包含 n 个元素的数组 A。在一场编程比赛中,总共有 n 名学生将参加,并且在开始之前,他们每个人都有一些正面评价(整数)。A[i] 表示第 i 个学生的评分。比赛结束后,每个学生都会得到一些正整数的位置。我们预计学生将根据他们的评分参加。如果学生 A 的评分严格低于学生 B,则 A 将获得严格高于 B 的位置。我们必须在比赛结束时找到位置。
因此,如果输入像 A = [3, 5, 3, 4, 5],那么输出将是 [4, 1, 4, 3, 1],因为第 2 和第 5 名学生共享最高评分的第一个位置,第四名学生排在第三位,第一名和第三名学生最后分享第四名。
脚步
为了解决这个问题,我们将遵循以下步骤 -
n := size of A for initialize i := 0, when i < n, update (increase i by 1), do: d := 1 for initialize j := 0, when j < n, update (increase j by 1), do: if A[j] > A[i], then: (increase d by 1) cout << d << ", "
示例
让我们看看以下实现以更好地理解 -
#include <bits/stdc++.h> using namespace std; void solve(vector<int> A){ int n = A.size(); for (int i = 0; i < n; i++){ int d = 1; for (int j = 0; j < n; j++){ if (A[j] > A[i]) d++; } cout << d << ", "; } } int main(){ vector<int> A = { 3, 5, 3, 4, 5 }; solve(A); }
输入
{ 3, 5, 3, 4, 5 }输出结果
4, 1, 4, 3, 1,