LeetCode 1:2つの数字

トピック:

整数配列NUMSと目標値の目標を考えると、配列内の2つの整数の目標値を特定し、その配列の添字に戻るにお願いします。

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

例:
考えるNUMS = [2、7、11 、15]、目標= 9
ためNUMS [0] + NUMS [1 ] = 2 + 7 = 9
返される[0,1]

1暴力的な問題解決のためのアイデア

時間の複雑さ:O(N ^ 2)
各要素について、我々はO(n)はO(n)の時間がかかります配列を介して、それの残りの部分に対応するターゲット要素を探してみてください。したがって、時間複雑度はO(N ^ 2)です。
複雑スペース:O(1)。

public 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 new int[0];
        }

ハッシュマップによる2アイデア

時間の複雑さ:O(n)は、
我々は唯一のリストが含まれているn個の要素一度トラバースしなければなりません。各テーブルで行われたルックアップのみO(1)時間がかかります。
空間複雑:O(n)は、
追加のスペースが必要ですが、ハッシュテーブルに格納された要素の数に依存して、テーブルは、n個の要素まで保存する必要があります。

public int[] twoSum(int[]nums,int target){
        Map<Integer,Integer> map = new HashMap();
        for (int i = 0; i < nums.length; i++) {
            int sub = target - nums[i];
            if (map.containsKey(sub)) {
                return new int[] {map.get(sub),i};
            }
            map.put(nums[i],i);
        }
        return new int[0];
    }

leetCodeリンク二つの数

公開された80元の記事 ウォンの賞賛140 ビュー640 000 +

おすすめ

転載: blog.csdn.net/linjpg/article/details/104564401