【LeetCode HOT 100】1. 两数之和

实现方法

  1. 递归
  • 遍历数组 nums,使用两个嵌套的循环:
  • 外层循环遍历数组中的每个元素 num,并获取其索引 i。
  • 内层循环从当前元素的下一个位置开始遍历数组,获取索引 j。
  • 对于每一对元素 (nums[i], nums[j]),判断它们的和是否等于目标值 target。
  • 如果找到一对元素的和等于目标值,则直接返回它们的索引 [i, j]。
  • 如果遍历完数组后仍未找到符合条件的两个元素,则返回空数组。
  • 这种方法的时间复杂度为 O(n^2),其中 n 是数组中的元素个数。由于需要遍历数组的所有可能组合,因此效率较低,不适用于大规模数据的情况。

func twoSum(nums []int, target int) []int {
    // 遍历数组中的每个元素
    for i, num := range nums {
        // 从当前元素的下一个位置开始遍历数组
		for j := i + 1; j < len(nums); j++ {
		    // 如果当前元素与后面的元素之和等于目标值
			if num+nums[j] == target {
			    // 返回两个元素的索引
				return []int{i, j}
			}
		}
	}
    // 如果未找到符合条件的两个元素,则返回空数组
    return nil
}

  1. 哈希表
  • 创建一个空的哈希表 hashTable,用于存储数组中的值及其对应的索引。
  • 遍历数组 nums,在遍历的过程中,将数组中的每个元素值及其索引存入哈希表中。
  • 对于数组中的每个元素 num,判断 target - num 是否在哈希表中存在,如果存在,则说明找到了两个数之和等于 target 的数。
  • 如果找到了符合条件的两个数,直接返回它们的索引即可。
  • 如果没有找到符合条件的两个数,则将当前元素值及其索引存入哈希表中,以便后续的查找过程。
  • 如果遍历完成后仍然没有找到符合条件的两个数,则返回 nil。
  • 通过使用哈希表,我们可以在 O(1) 的时间复杂度内判断一个元素是否在哈希表中,因此整个算法的时间复杂度为 O(n),其中 n 是数组中的元素个数。
func twoSum(nums []int, target int) []int {
	hashTable := map[int]int{}
	// 用map存储数据,key为nums中的值,value为索引
	//  遍历nums,将nums[i]和target-nums[i]的值作为key存入map中,
	//  如果map中已经存在该key,则说明找到了两个数之和为target的数
	for i, num := range nums {
		if j, ok := hashTable[target-nums[i]]; ok {
			return []int{i, j}
		}
		// 将未找到的数据存入map中
		hashTable[num] = i
	}
	return nil
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值