给定数字的整数及其优先级,返回优先级最高的数字说
int[] number={0,1,3,4}
int[] priority={1,3,4,2} //All numbers are distinct
我想要值 3(优先级 4 是最大的),我怎样才能轻松有效地实现呢?
要直接回答您的问题而不提出任何关于使用其他对象的建议,请尝试使用MAX()
and ,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;