【发布时间】:2021-10-03 02:19:17
【问题描述】:
让两个数组
arr = [1,5,6,3,10]
rank = [100,0,1,100,2]
基于rank 数组(其中包含arr 中镜像元素的ranks),结果应该是
[5,6,10,1,3]
结果中的第一个元素是5
(arr中5的索引为
arr[1],rank中0的索引为rank[1]。这就是我们必须采取排名的方式。 0 是所有等级中最小的,因此首先打印 5 )
结果中的第二个元素是6
arr数组中6的索引在索引arr[2]处,其秩为1,因为它位于索引rank[2]。 1 是第二小的 所有等级,所以接下来打印 6) 这就是我们必须根据排名数组对数组进行排序的方式。Here if two ranks are same then we have to compare the values in the array itself and print the smaller first arr[0] = 1 and arr[3] = 3 Both having same ranks 100. So compare those elements and print the smallest value. That gives the结果
5,6,10,1,3
【问题讨论】:
-
你能改变
rank或创建额外的数据结构吗?如果您可以创建一个对数组,对其进行排序,然后提取所需的值,那就容易多了。 -
是的,我们可以。你能用 C++ 解决这个问题吗? .我已经用 unordered_map 解决了这个问题,并且搞砸了一些逻辑。你能想出解决下面的测试用例吗?
-
第二个测试用例:arr = [3,1,2,5] , rank = [1,1,2,2] => result = [1,3,2,5] .Hope你得到这个。 arr 元素 1 和 3 的秩为 1,因此将它们进行比较,并将 1 写入结果 [0],将 3 写入结果 [1]。最后 2 个元素类似
-
嗯,unordered_map 的重点是它没有排序(排序)。你快到了,只需使用
std::map。 -
也用过。第一个测试用例成功了,但第二个失败了。
标签: c++ arrays sorting comparison