【Java学習】1配列、辞書

4627 ワード

Leetcodeの2つの数の和に関する知識点
引用する
このブログから正式にJava言語で問題を書き始めましたが、テーマはLeetcodeでpython言語で書いた簡単な問題です.アルゴリズムを強固にする一方で,Java言語の使い方をできるだけ早く身につける.博文は最後にAのコードを添付します.コミュニケーションを歓迎します.
タイトル
1.両数の和
整数配列とターゲット値を指定し、配列とターゲット値の2つの数を見つけます.入力ごとに1つの答えしか対応せず、同じ要素が再利用できないと仮定できます.
例:nums=[2,7,11,15]が与えられ、target=9はnums[0]+nums[1]=2+7=9であるため[0,1]を返す
インテリジェントポイント
Java配列
Javaの配列は、固定サイズの同型データを格納するために使用されます.例えばnum[10]は、10個の独立変数num 0,num 1,...,num 9が宣言されていることを示す.まず、配列の宣言、作成、初期化手順について説明します.多次元配列とArrayクラスの使い方を紹介します.
配列変数の宣言
配列は、プログラムで使用する前に宣言する必要があります.次のように宣言します.dataTypeはデータ型、arrayRefVar次元グループ変数名を表します.
dataType[] arrayRefVar;      //     
 
dataType arrayRefVar[];       //    ,    

配列の作成
Javaはnewオペレータで配列を作成します.ここでarraySizeは配列長であり、配列要素の下付き文字は0から始まる.
dataType[] arrayRefVar = new dataType[arraySize];   //    ,            arrayRefVar 

配列の初期化
  • 配列を作成すると配列
  • が初期化される.
    double[] myList = new double[4]{1.2, 3.4, 2.5, 7.9}
    
  • 配列の要素に対して循環により
  • を割り当てる.
    double[] myList;
    for(int i=0; i

    たじゅうはいれつ
    複数の配列は配列の配列と見なすことができ、例えば2次元配列は複数の1次元配列からなる配列と見なすことができる.
    String str[][] = new String[3][4];
    

    多次元配列の初期化には、次の2つがあります.
  • 静的初期化:配列を宣言しながら
  • を初期化する
    int[] arr = new int[]{1,2,3};
    
  • 動的初期化:配列を宣言した後、
  • を初期化する
    String[] strArr = new String[3];
    strArr[0] = "Hello";
    strArr[1] = "World";
    strArr[2] = "Hello World";
    

    多次元配列が空間を割り当てる方法は2つあります.
  • は各次元に直接空間を割り当て、フォーマットは以下の
  • である.
    int a[][] = new int[2][3];
    
  • 最上位次元から始まり、次元ごとに空間
  • が割り当てられます.
    String s[][] = new String[2][];
    s[0] = new String[2];
    s[1] = new String[3];
    

    Arraysクラス
    java.util.Arrayクラスは配列を容易に操作でき,提供する方法はすべて静的である.fill,sort,equals,binarySearchなどの方法があり、具体的には以下の通りである.
  • boolean equals(array 1,array 2):2つの配列が等しいかどうかを比較する
  • boolean flag = Array.equal(str1, str2);    //  true false
    
  • void sort(array):配列array要素を昇順に配列する
  • Array.sort(score);      //score         
    
  • String toString(array):配列を文字列に変換します.arrayを直接印刷し、hashcodeコードが出るため、配列内容を出力するには文字列に変換して
  • を印刷する必要がある.
    String str = Array.toString(score);      
    
  • void fill(array,val):配列内のすべての要素をval
  • に割り当てます.
    Array.fill(num, 6);        //  num        6
    
  • int binarySearch(array,val):二分検索を使用して、配列arrayの値valの下付きを検索します.配列は秩序数列でなければならないが、本無秩序であればsort関数を用いてソートし、
  • を二分して検索する必要がある.
    int key = Arrays.binarySearch(num, 3);   //    3   num    
    
  • dataType[]copyOf(array,length):配列arrayをlengthの長さの新しい配列
  • にコピーする
    dataType[] b = Arrays.copyOf(a, a.length);     //  1:       2:      
    

    Java Mapインタフェース
    Javaには辞書の概念はなくなり,一般的にはMapでキー対値の機能を実現する.Mapインタフェースではキーと値を1つずつマッピングし,キーで値を取得できる.Mapの宣言作成方法:MapmapName=new HashMap()Mapの方法は以下の通りです.
  • void clear():すべてのマッピング関係を削除
  • mapName.clear();
    
  • boolean containsKey(Object k):map(マッピング)にキーkのマッピング関係が含まれている場合はtrueを返します.
  • boolean containValue(Object v):mapに1つ以上のキー値が値vにマッピングされている場合、trueが返されます.
  • Set entrySet():map(マッピング)内のすべてのマッピング関係をSetビューに追加します.
  • boolean equals(Object obj):指定したオブジェクトとmapが等しいかどうかを比較します.このオブジェクトはmapではないか、元のマッピングのsizeが異なる可能性があります.mapとobjの各データ要素が同じである場合にのみtrueが返されます.
  • Object get(Object k):指定されたキーにマッピングされた値を返します.mapにキーのマッピング関係が含まれていない場合はmullを返します.
  • int hashCode():このマッピングのハッシュコード値を返します.
  • boolean isEmpty():このマッピングにキー値のマッピング関係が含まれていない場合はnullを返します.
  • Set keySet():このマッピング内のすべてのキーのSetビューを返します.
  • Object put(Object k,Object v):mapに新しいk-vキーペア値を追加します.
  • void putAll(Mapm):マッピングmのすべてのマッピング関係をこのマッピングにコピーします.
  • Object remove(Object k):キーkのマッピング関係がある場合は、マッピングから削除します.
  • int size():map(マッピング)のキー値関係数を返します.
  • Collection values():このマッピングに含まれる値のCollectionビューを返します.

  • 解法
    テーマから分かるように,2数の和を求め,目標値targetがある.アルゴリズムの複雑さを低減し,配列の遍歴回数を低減するには,重要なツールであるMapを用いる必要がある.現在の遍歴データbの場合、以前に遍歴したデータの中にaが1つ存在し、a+b=targetを満たす限り、遍歴は終了する.a,bの位置を返すので,遍歴したデータの値(keyとして)と位置(valueとして)を格納するにはMapを用いる必要がある.
  • アルゴリズム複雑度:O(n)
  • Solution:
  • class Solution {
        public int[] twoSum(int[] nums, int target) {
            Map map = new HashMap();
            for(Integer i=0;i