题目:给定一个整型的数组,找出其中的两个数使其和为某个指定的值,并返回这两个数的下标(数组下标是从0开始)。假设数组元素的值各不相同,则要求时间复杂度为O(n),n为数组的长度。
书中给出的核心思想:利用哈希函数,因为题意给出的是数组元素的值各不相同,所以第一次可以以键值<value,index>方式存入哈希表中;第二次扫描的时候,检查这个target与当前值的差值是否在哈希表中,且这个键不等于当前值。
代码实现:
func twoSum(arr []int, target int) (int, int, bool) {
i, j := 0, len(arr)
m := make(map[int]int)
for ;i < j; i += 1 {
m[arr[i]] = i
}
for i = 0;i < j;i += 1 {
v, ok := m[target - arr[i]]
if ok && target -arr[i] != arr[i] {
return m[arr[i]], v, true
}
}
return -1, -1, false
}