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