2020-07-18:給定一個無序數組和一個目標值,找出數組中兩個數之和等於目標值的所有組合,並指出其時間復雜度。


福哥答案2020-07-18:

假設數組是[3,5,3,5],目標值是8。答案是否可重復,題里沒說,所以分3種情況。如下:

1.重復。答案是【0,1】【0,3】【1,2】【2,3】,序號組合,共4種組合。
解法如下:
1.1.嵌套遍歷。時間復雜度:O(n^2)。
1.2.哈希法。鍵存數組元素值,值存出現次數。時間復雜度:O(n)。
1.3.排序+雙指針夾逼。時間復雜度:O(nlogn)。

2.半重復。答案是【0,1】【2,3】,也可能是【0,3】【1,2】,序號組合,共2種組合。
解法如下:
2.1.嵌套遍歷。時間復雜度:O(n^2)。
2.2.哈希法。鍵存數組元素值,值存出現次數。時間復雜度:O(n)。
2.3.排序+雙指針夾逼。時間復雜度:O(nlogn)。

3.不重復。答案是[3,5],值組合,共1種組合。
解法如下:
3.1.嵌套遍歷。時間復雜度:O(n^2)。
3.2.哈希法。鍵存數組元素值,值不存。時間復雜度:O(n)。
3.3.排序+雙指針夾逼。時間復雜度:O(nlogn)。
3.4.位圖法。時間復雜度:O(目標值)。

代碼采用3.2方式,用golang語言編寫。代碼如下:

package main
 
import "fmt"
 
func main() {
    nums := []int{3, 5, 3, 5, 4, 4}
    target := 8
    for k, _ := range twoSum(nums, target) {
        fmt.Println(k, "+", target-k, "=", target)
    }
}
 
func twoSum(nums []int, target int) map[int]struct{} {
    map0 := make(map[int]struct{}) //緩存,哈希保存
    ret := make(map[int]struct{})  //保存結果
 
    for i := 0; i < len(nums); i++ {
        complement := target - nums[i]     //差值 = 目標值-元素值
        if _, ok := map0[complement]; ok { //如果字典里有差值,說明已經找到了
            if complement < nums[i] {
                ret[complement] = struct{}{}
            } else {
                ret[nums[i]] = struct{}{}
            }
        }
        //如果字典里沒有差值,緩存數組的當前值
        map0[nums[i]] = struct{}{}
    }
 
    return ret
}

  執行結果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 給定一個整數數組和一個目標值,找出數組中和為目標值的兩個數 題1:給定一個整數數組和一個目標值,找出數組中和為目標值的兩個數 Leetcode練習(Python):數組類:第34題:給定一個按照升序排列的整數數組 nums,和一個目標值 target。找出給定目標值在數組中的開始位置和結束位置。 你的算法時間復雜度必須是 O(log n) 級別。 如果數組中不存在目標值,返回 [-1, -1]。 算法-找出數組中兩個元素之和等於給定的目標值 給定一個整數數組 nums 和一個目標值 k,請實現一個方法判斷 nums 中是否存在某個片段(即若干個相連元素)之和等於 k。要求時間復雜度為 O(n)。 給定一個整數數組和一個目標值,找出數組中和為目標值的兩個數 例如給定nums = [2,7,11,15],target = 9 php 獲取兩個給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,並返回他們的數組下標。 給出一個數組和一個目標值,如果數組中任意兩個數字的加和等於目標值,輸出這兩個位置 給定一個整數數組 nums 和一個整數目標值 target,請你在該數組中找出 和為目標值 target  的那 兩個 整數,並返回它們的數組下標。 給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,並返回他們的數組下標。
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM