1:タイトル説明
タイトル説明
所定の整数k ARRソートされた配列は、タプルを下降ARR繰り返し印刷がkと全ての和でありません
例えば、ARR = [-8、-4、-3、0、1、2、4、5、8、9]、K = 10、印刷結果です。
1,9
2,8
[条件]
時間計算量は
O(N)O (N- )、空間的複雑度がO(1)O (1 )
説明を入力します。
最初の行は2つの整数を有し、N、K
次の行を配列内の要素の整数を有し、nは
出力説明:
出力線に複数の、それぞれが2つの答えの整数を表す
(各モードの比較タプルサイズが順次タプル内の各数を比較している)小から大までによるタプル出力シーケンスを
2:タイトルの分析
この手の質問1組で、我々はポインタについて知るを分析することができますが、限り、出力に発見することができ、適切な配列要素を探し始めながら、左右の手、それぞれ、プラス1およびマイナス1。へ
3:コード例
パッケージNo] 3のを。 インポートjava.util.Scanner; / ** * @author :dazhu * @date:2020年3月29日夜01時46分に作成された * @description: :*によって@modified * @version :$ * / パブリック クラスのメイン{ 公共の 静的な 無効メイン(文字列[]引数){ スキャナSC = 新しいスキャナ(System.in)。 INT、N = sc.nextInt()。 INT K = sc.nextInt()。 INT []配列= 新しい INT [N]。 にとって(のInt I = 0、I <N - 、I ++ ){ 配列[I] = sc.nextInt(); } intが = 0を左、 INT右1-N- =。; // 用(0 =左、左<N-、左++ ){ // IF(左> =右){ // BREAK; // } // // と右大とケースの左と、右1は、継続左を検索し続ける // 一方(配列[左] +配列[右]> K){ // 右- ; // } // IF(配列[左] +アレイは、[右] == K &&は{)右=左! //// System.out.print(配列[左] +」「+配列[左])。 //// のSystem.out.println(); // のSystem.out.println(配列[左] +」「+配列[右])。 // // } // } int型の和= 0 。 StringBufferのSB = 新しいStringBufferを(); 一方、(真){ 場合(左> = 右){ ブレーク。 } 和 =配列[左] + 配列[右]。 もし(合計> K){ 右 - ; } 他{ 場合(合計< K){ 左 ++ 。 } // 等于的情况 他{ 。sb.append(配列[左])追記( " ").append(配列[右])追加します。(" \ n" ); 左 ++ ; 右 - ; } } } System.out.print(sb.toString())。 } }