LeetCodeブラシタイトル - (01)と2つの数字

タイトル説明

整数の配列を考えるnumsと、目標値をtarget、あなたは配列にすることを目標値を見つける2つの整数、およびその配列の添字に戻ります。
あなたは、各入力が一つだけ答えに対応することを想定することができます。ただし、同じ配列要素を再使用することはできません。



给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

暴力的なソリューションへのソリューション

問題解決のためのアイデア

その暴力法は、2トラバース2つの数値とするかどうかを見つけることだと思う可能性が最も高いですtarget次のようにプロセスは以下のとおりです。

  1. 使用するiアレイの各要素を反復します
  2. i各サイクルを用いてトラバースを開始しますji + 1
  3. 分析iおよびj対応する値とするかどうかtarget

コードの実装

func twoSum(nums []int, target int) []int {
    for i := 0; i < len(nums); i ++ {
        for j := i + 1; j < len(nums); j ++{
            if nums[i] + nums[j] == target{
                return []int{i,j}
            }
        }
    }
    return []int{}
}

複雑性分析

  • 時間の複雑さ:O(N ^ 2)。2つのサイクルがあり、イベントの複雑さの各サイクルは、O(N)です。全体的な複雑さはO(N ^ 2)です。
  • 複雑スペース:O(1)。

ソリューション2つのハッシュ・テーブル・ソリューション

問題解決のためのアイデア

解決策は、ハッシュテーブルに役立ちます。アレイを介して、現在の要素は、ハッシュテーブルに追加されたとき。そして、すでにハッシュテーブルに対応する目標電流要素があるかどうかをチェックします。リターンがあるかどうか。

コードの実装

func twoSum2(nums []int, target int) []int {
    m := make(map[int]int)
    for i := 0; i < len(nums); i ++ {
        if index, exists := m[target - nums[i]]; exists {
            return []int{i,index}
        }
        m[nums[i]] = i
    }
    return []int{}
}

複雑性分析

  • 時間の複雑さ:O(n)を。私たちは、一度だけの配列を横断しました。
  • 複雑スペース:O(n)を。ハッシュテーブル、追加スペースの必要性を使用してください。ハッシュテーブルに格納された要素の数に応じて、テーブルは、O(n)の要素まで格納する必要があります。

おすすめ

転載: www.cnblogs.com/leiwei/p/11443656.html