LeetCode-1-2つの数値の合計(単純)


1.説明

整数配列numsとターゲット値targetを指定して、合計が配列内のターゲット値である2つの整数を見つけ、それらの配列添え字を返します。

各入力は1つの回答にのみ対応すると想定できます。ただし、配列内の同じ要素を2回使用することはできません。

2.例

nums = [2、7、11、15]、target = 9の場合
、nums [ 0 ] + nums [ 1 ] = 2 + 7 = 9
なので、[0、1]を返します。

3.分析

目標:合計が指定された値と等しくなるように、配列から2つの数値を見つけます。

タイトルには2つの制限があります。1つ目のポイントは、特定の値に対して、2つの数値の合計が条件を満たす1つの状況のみが配列に存在することです。2つ目のポイントは、配列内の同じ要素を2回使用できないことです。

3.1。ブルートフォース検索

配列内のすべての値について、ペアワイズマッチングを実行します。それらの合計は指定された値に等しく、これらの2つの数値が見つかります。
2レベルのトラバーサルが必要であり、トラバーサルの各レベルで数値が検索されます。それらの合計が指定された値と等しい場合、検索は停止します。
時間の複雑さ:最悪の場合、O(n 2)O(n ^ 2)O n2

3.2。辞書マッチング

目標値が分かれば、数値の補数を決定できます。
たとえば、2つの数値の合計が9である必要があります。1つは1で、もう1つは何ですか。
もう1つの数値は8(9-1)で、num2 = target-num1です。
この特性を利用できます。

一度配列にアクセスし、現在アクセスしている配列要素をnums [i]として設定し、nums [i]が辞書にすでに存在する(キー)かどうかを調べます。
存在しない場合は、(target-nums [i])を辞書のキー(キー)として使用し、添え字iを辞書の値(値)として挿入します。
既に存在する場合は、(target-nums [i]を指定します)配列numsに存在し、訪問済みである必要があります。その添え字はディクショナリから取得できます。

このようにして、これら2つの数値は1回のトラバースで取得できます。
時間の複雑さ:最悪の場合はO(n)O(n)O n

4.コード

class Solution {
    
    
    public int[] twoSum(int[] nums, int target) {
    
    
        int[] indices = new int[2];
        out:
        for(int i = 0; i < nums.length; ++i)
        {
    
    
            for(int j = i + 1; j < nums.length; ++j)
            {
    
    
                if(nums[i] + nums[j] == target)
                {
    
    
                    indices[0] = i;
                    indices[1] = j;
                    break out;
                }
            }
        }
        return indices;
    }
}
class Solution {
    
    
    public int[] twoSum(int[] nums, int target) {
    
    
        int[] indices = new int[2];
        Map<Integer, Integer> dict = new HashMap<>();
        
        for(int i = 0; i < nums.length; ++i)
        {
    
    
            if(dict.containsKey(nums[i]))
            {
    
    
                indices[0] = dict.get(nums[i]);
                indices[1] = i;
                break;
            }
            else
            {
    
    
                dict.put(target - nums[i], i);
            }
        }
        return indices;
    }
}

5.検証

ここに画像の説明を挿入

ここに画像の説明を挿入

6.ソース

  1. LeetCode 1. 2つの数値の合計
    出典:LeetCode
    リンク:https ://leetcode-cn.com/problems/two-sum
    著作権はLeetCode が所有しています商用転載については、正式な許可書にご連絡ください。非商用転載については、出典を明記してください。

おすすめ

転載: blog.csdn.net/PursueLuo/article/details/108746987