具有最高优先级的数字



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

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

我想要值 3(优先级为 4 最大),我如何轻松有效地实现它?

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

int _value = number[Array.IndexOf(priority, priority.Max())];
Dictionary<int,int> priority; 

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

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

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)

我认为以下是您要查找的内容:

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
var highestPriorityNumber = number.Select((n, i) => new {p = priority[i], n})
    .OrderByDescending(a => a.p)
    .First().n;

最新更新