配列要素の和

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つの答えの整数を表す
(各モードの比較タプルサイズが順次タプル内の各数を比較している)小から大までによるタプル出力シーケンスを
例1

エントリー

コピー
10 
-8 -4 -3 0 1 2 3 4 5 8 9

輸出

コピー
1 9 
2 8

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())。
    } 
}

 

おすすめ

転載: www.cnblogs.com/dazhu123/p/12592267.html