-1

次の 2 次元配列があると仮定します。

{{0,1,2,3,4}, {6,7,8,9}, {5,6}, {10}}

重複するインデックスを見つけるにはどうすればよいですか? (6 つの重複に注意してください) x 基準に基づいて 1 つを削除しますか?

出力は

{{0,1,2,3,4}, {6,7,8,9}, {10}, {5}}

また

{{0,1,2,3,4}, {7,8,9}, {5,6}, {10}}

x に基づいています。x は int 値です。0 は変化なしで出力し、1 は上を出力し、2 は下を出力します。

すべてのサブ配列が n から k までの 1 ずつ増加するシーケンスであることは 100% 確信しています。

4

2 に答える 2

0

非C#固有の答え:

  • 配列を最小値で並べ替える
  • 配列を反復処理する
    • 現在の配列の最大要素が次の配列の最小要素よりも小さい場合、重複がないため、何もしません
    • 現在の配列から要素を削除する場合は、次の配列の最小値に等しい要素から切り取ります。
    • 次の配列から要素を削除する場合は、現在の配列の最大値に等しい要素まで切り取ります。

これらは配列であり、連続する要素は 1 ずつインクリメントされるため、単純な減算を行うことでカット インデックスを決定できます。配列をステップ実行する必要はありません。

これにより、配列の順序が削除されますが、例から、それは重要ではないようです。
重要であれば、各配列の元のインデックスを保持することは難しくありません。

1 つの配列が (同じ側で) 他の複数の配列とオーバーラップする可能性がある場合、複雑さが増す可能性がありますが、対処するのはそれほど難しくありません。

例:

Input: {{0,1,2,3,4}, {6,7,8,9}, {5,6,7}, {10}}  
Sorted: {{0,1,2,3,4}, {5,6,7}, {6,7,8,9}, {10}}

Arrays 1 and 2:  
4 < 5, no overlap

Arrays 2 and 3:  
7 >= 6, overlap  
Either cut off 6 and 7 from array 2, or 6 and 7 from array 3  
(depending on what output you want)

Arrays 3 and 4:
9 < 10, no overlap

Output:  
{{0,1,2,3,4}, {5}, {6,7,8,9}, {10}}  
or  
{{0,1,2,3,4}, {5,6,7}, {8,9}, {10}}
于 2013-06-25T12:35:22.557 に答える