ウェブ上で何かを置くのに便利、時間を見てください。コードはバグでのみ参照目的のために最適な解決策ではないことがあります。
タイトル:入力配列と昇順に番号で、配列内の2つの数値を見つけ、彼らは正確にデジタル入力されるように。
所要時間の複雑さはO(n)があります。デジタル入力とデジタル出力に等しい複数が存在する場合、任意のペアであってもよいです。
例えば、デジタル入力アレイ1,2,3,4,7,11,12,15、および15。4 + 11 = 15であるので、出力4,11。
この質問は、そこにあるかどうかを判断するだけで、このようなログは非常に簡単です。もちろん、あなたも見つけるために、すべての対象とし、すべての出力の数を置いてもよいです。次のコード番号は、出力の要件を満たすために、しかし、繰り返しの場合を考慮していない、例えば、2 4、2 11があります。そうして11 + 4 = 15のペアを出力します。
基本的な考え方:配列を発注しているので、その番号のペアの条件を満たすように、中心に近づくために探して、頭と尾からのスタート。
コードは次のようである(C#の):
コードの表示
1
//
出力のすべての可能な組み合わせ(出力のみ回繰り返す)直接溶液、
2 公共静的ボイド ISEXIST( INT [] MyArrayという、 int型の 値) 。3 { 4 INT START = 0 ; 5 int型の エンド= myArray.length - 1。 ; 。6 IF (myarrayの[終了] <値/ 2) 7 { 8 Console.WriteLineを( " SUCHていないペアが存在します。"); 9。
}
10
11 ながら (開始<エンド)
12 {
13 であれば (myarrayの[開始] + myarrayの[終了]>値)
14 {
15 end--。
16 }
17 他の
18 {
19 であれば (myarrayの[開始] + myarrayの[終了] <値)
20 {
21 開始++。
22 }
23 他
24 {
25 Console.WriteLineを( " {0} + {1} = {2} " 、MyArrayという[++スタート]、MyArrayという[end--]、値)。
26は // 重複ペアを検討していない 27 } 28 } 29 } 30 }
}
10
11 ながら (開始<エンド)
12 {
13 であれば (myarrayの[開始] + myarrayの[終了]>値)
14 {
15 end--。
16 }
17 他の
18 {
19 であれば (myarrayの[開始] + myarrayの[終了] <値)
20 {
21 開始++。
22 }
23 他
24 {
25 Console.WriteLineを( " {0} + {1} = {2} " 、MyArrayという[++スタート]、MyArrayという[end--]、値)。
26は // 重複ペアを検討していない 27 } 28 } 29 } 30 }
ます。https://www.cnblogs.com/CSharpSPF/archive/2012/04/03/2431536.htmlで再現