-2

数値の整数とその優先度を指定すると、優先度が最も高い数値を返します

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

値を 3 (最大の優先度 4) にしたいのですが、どうすればそれを簡単かつ効率的に達成できますか?

4

5 に答える 5

4

他のオブジェクトの使用についての提案なしで質問に直接答えるには、 and を使用MAX()IndexOf()てみてくださいpriority

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

これは、2 つのアレイよりも優れた出発点となります。キーは数値で、値はその優先度です。このマップを使用して、任意の番号の優先順位を確認できます。

あなたの場合、あなたがする必要があるのは、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 に答える