数値の整数とその優先度を指定すると、優先度が最も高い数値を返します
int[] number={0,1,3,4}
int[] priority={1,3,4,2} //All numbers are distinct
値を 3 (最大の優先度 4) にしたいのですが、どうすればそれを簡単かつ効率的に達成できますか?
他のオブジェクトの使用についての提案なしで質問に直接答えるには、 and を使用MAX()
しIndexOf()
てみてくださいpriority
。
int _value = number[Array.IndexOf(priority, priority.Max())];
Dictionary<int,int> priority;
これは、2 つのアレイよりも優れた出発点となります。キーは数値で、値はその優先度です。このマップを使用して、任意の番号の優先順位を確認できます。
あなたの場合、あなたがする必要があるのは、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;