以下是一道Go语言算法题的样例及详细回答:
题目:给定一个整数数组nums和一个目标值target,在数组中找出两个数,使它们的和等于目标值。假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:给定nums = [2, 7, 11, 15], target = 9,因为nums[0] + nums[1] = 2 + 7 = 9,所以返回[0, 1]。
解题思路:可以使用哈希表来解决这个问题。遍历数组中的每个元素,将其与目标值的差值作为键,元素的下标作为值存储在哈希表中。然后再次遍历数组中的每个元素,查找哈希表中是否存在与当前元素相加等于目标值的元素,如果存在则返回它们的下标。
代码实现:
func twoSum(nums []int, target int) []int {
m := make(map[int]int)
for i, num := range nums {
if j, ok := m[target-num]; ok {
return []int{j, i}
}
m[num] = i
}
return nil
}
解释:首先创建一个空的哈希表m,然后遍历数组中的每个元素,如果哈希表中存在与当前元素相加等于目标值的元素,则返回它们的下标。否则将当前元素与目标值的差值作为键,元素的下标作为值存储在哈希表中。最后如果没有找到符合条件的元素,则返回nil。
注意事项:在面试中,需要注意代码的可读性和健壮性,例如对于输入为空数组或目标值为负数的情况需要进行特判。同时也需要注意代码的效率和性能,例如可以使用双指针法来优化查找过程。