数据测试 每日一道算法, 《两数之和》

YangPower海盐 · 2020年04月23日 · 最后由 dive 回复于 2020年04月23日 · 2160 次阅读

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

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

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

list 可能存在 [1,2,3,4,2,3]

共收到 4 条回复 时间 点赞

这不是 leetcode 的第一题吗😂

cookie 回复

貌似不搭嘎的哦 ,学习 成长 对自己有利就行;

胡乱分享下,提出个思路哈哈
'''
1.因数组中同一个元素只能使用一次,故假定可以使用另外一个一毛一样的数组作为其状态位,假如得出和为目标值,则将其锁定输出
2.遍历
'''
a = [1,3,5,3,6,7,9,10,2,2,3,5]
target = 8
b = [0 for x in range(len(a))]

for i in range(0,len(a)):
if b[i] == 0:# 说明没被使用
for j in range(i,len(a)):
if b[j] == 0:
if a[i] + a[j] == target:
print(i,':',a[i],',',j,':',a[j])
b[i] = 1
b[j] = 1
break

这个就是 LeetCode 的入门题吧,

func twoSum(nums []int, target int) []int {
    // hash 一次遍历 空间:O(n) 时间O(n)
    info := make(map[int]int)
    for i, num := range nums {
        //如果target-num存在值,说明该num为对应的值,然后输出该num的index和target的index
        if index, ok := info[target-num]; ok {
            return []int{index, i}
        } else if _, ok := info[num]; !ok {
            info[num] = i
        }
    }
    return []int{}
}
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册