gpt4 book ai didi

algorithm - 按顺序排列列表

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:45:06 24 4
gpt4 key购买 nike

我有一个列表 {10,5,3,9,12}。我需要将它转换成这样的 {3,1,0,2,4}。我的意思是将 0 分配给最小值,将 1 分配给下一个最小值,依此类推。

我的代码:

     list = {2,3,10,5,1};
for (int i =list.Count-1; i >= 0 ; i--)
{

var maxNo = list.Max();
var smallIndex = list.IndexOf(maxNo);
list[smallIndex] = i * -1;

}
for (int i = 0; i < list.Count; i++)
{
list[i] = list[i] * -1;
}
// prints {1,2,4,3,0}

注意:列表将只包含正数。

上面的代码没问题。在这方面需要帮助。

最佳答案

基本上您只需要对列表进行排序。查看排序算法。

您可以构建另一个列表,其中包含您的原始数字以及从 0 到列表长度的整数索引,例如 {{10,0}, {5,1}, {3,2}, {9,3}, {12,4}} ,使用您的编程语言的内置排序函数对该列表进行排序,然后提取整数索引。

编辑:您的程序可以运行,但它相当笨拙(使用那些负数),而且效率很低。它为每个元素遍历列表两次以找到最大值并找到最大值的索引。我建议您稍微阅读一下排序算法。

EDIT2:实际实现可能意味着对 sort 使用不同的比较函数:假设您的原始列表称为 array .制作另一个数组 idx = {0,1,2,3,4} , 并且不根据比较函数对其进行排序 x < y但是array[x] < array[y] .

更正

此处的算法找到所需内容的逆排列。正如 Don 提到的,您需要进行另一种排序来反转排列。

关于algorithm - 按顺序排列列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6563149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com