二つの数字(2点の合計)

LeetCode最初の質問の
主題の説明:整数配列NUMSと目標値の目標を考えると、配列内の二つの整数の目標値を特定し、その配列の添字に戻るにお願いします。

あなたは、各入力が一つだけ答えに対応することを想定することができます。ただし、同じ配列要素を再使用することはできません。
ソリューション

  1. ブルートフォース(アレイ、Oの時間複雑さを横切ります n個 2 N ^ 2 O(1)の)、空間的複雑。
public static int[] twoSum(int[] nums, int target) {
        for(int i=0;i<nums.length;++i){
            for(int j=i+1;j<nums.length;++j){
                if(nums[j]==target-nums[i]){
                    return new int[]{i,j};
                }
            }
        }
        return null;
    }

  1. 二回ハッシュテーブル:最初に報告されたキーと値のハッシュマップに入れ、その後、配列による。O(N)、O(N)の空間的な複雑さの時間複雑。
public static int[] twoSum(int[] nums, int target) {
        HashMap<Integer,Integer> map = new HashMap();
        for(int i= 0;i<nums.length;++i)
        {
            map.put(nums[i],i);
        }
        for(int i=0;i<nums.length;++i){
            if(map.containsKey(target-nums[i])&&map.get(target - nums[i])!=i){
                return new int[]{i,map.get(target-nums[i])};
            }
        }
        return null;
    }
  1. 再びハッシュ:側は、キーと値、サイド裁判官を置きます。O(N)、O(N)の空間的な複雑さの時間複雑。
    穴は、第一置く場合鍵ハッシュマップが決定その後、同じ値ではない、がある、同じ2つの数字との出会いは、目標に等しい(例えば:[3,3]、ターゲット:6 )、 なぜならプットバックカバーの値私は正しい結果を得ることができないので、値は、目の前に置きます。
    次のようにエラーコードがあります
public static int[] twoSum(int[] nums, int target) {
        HashMap<Integer,Integer> map = new HashMap();
        for(int i= 0;i<nums.length;++i)
        {
            map.put(nums[i],i);
            if(map.containsKey(target - nums[i]) && map.get(target -nums[i])!=i){
                return new int[]{i,map.get(target - nums[i])};
            }
        }
        return null;
    }

正しいコード

public static int[] twoSum(int[] nums, int target) {
        HashMap<Integer,Integer> map = new HashMap();
        for(int i= 0;i<nums.length;++i)
        {
            if(map.containsKey(target - nums[i])){
                return new int[]{i,map.get(target - nums[i])};
            }
            map.put(nums[i],i);
        }
        return null;
    }
公開された12元の記事 ウォンの賞賛5 ビュー614

おすすめ

転載: blog.csdn.net/qq_43657590/article/details/103945819