-2

给定数字的整数及其优先级,返回优先级最高的数字说

int[] number={0,1,3,4}
int[] priority={1,3,4,2} //All numbers are distinct

我想要值 3(优先级 4 是最大的),我怎样才能轻松有效地实现呢?

4

5 回答 5

4

要直接回答您的问题而不提出任何关于使用其他对象的建议,请尝试使用MAX()and ,IndexOf()因为您已经提到其中的所有数字priority都是不同的,

int _value = number[Array.IndexOf(priority, priority.Max())];
于 2013-01-25T06:19:44.277 回答
2
Dictionary<int,int> priority; 

这将是比 2 个数组更好的起点。键是一个数字,值是它的优先级。然后可以使用此映射来检查任何数字的优先级。

尽管在您的情况下,您需要做的就是在第二个数组中找到具有最大值的元素的索引,并在第一个数组中的该索引处输出元素

于 2013-01-25T06:14:18.033 回答
1
int max=0;
for(int i=1; i<priority.length; i++)
   if(priority[max] < priority[i])
          max = i;

return num[max];

没有要创建的对象,O(n) 复杂度——你可以做的最好的事情,因为你必须访问每个对象。此外,没有对象意味着没有内存开销,因为您只使用原语int max

  • 内存复杂度 O(1)

  • 时间复杂度 O(n)

于 2013-01-25T12:49:03.913 回答
0

我认为以下是您正在寻找的内容:

IDictionary<int, int> priority = new Dictionary<int, int>(); // priority, value
priority.Add(1, 3);
priority.Add(2, 4);
priority.Add(3, 5);

Console.WriteLine(priority[2]); //get value with priority 2
于 2013-01-25T06:17:19.160 回答
0
var highestPriorityNumber = number.Select((n, i) => new {p = priority[i], n})
    .OrderByDescending(a => a.p)
    .First().n;
于 2013-01-25T06:19:24.307 回答