Day1-两数之和

 

https://leetcode.cn/problems/two-sum/

解题思路:

一、时间复杂度O(n*n),空间复杂度O(n)

暴力枚举:

用两个for循环去遍历nums数组,第一个for循环从数组的第i个元素开始遍历x,第二个for循环从数组的第i+1个元素开始遍历直到查找到值为target-x的元素时,返回x和target-x所在的位置下标。

func twoSum(nums []int, target int) []int {
	for i,x:=range nums{
		for j:=i+1;j<len(nums);j++{
			if x+nums[j]==target{
				return []int{i,j}
			}
		}
	}
	return nil
}

二、时间复杂度O(n),空间复杂度O(n)

创建一个哈希表用来标记nums数组,for循环遍历数组nums。

若哈希表里没有target-x的值,则将此时遍历到的元素x标记到哈希表;若哈希表里有找到target-x的值,则返回x,target-x的数组元素下标

func twoSum(nums []int,target int) []int {
	hashTable:=map[int]int{}
	for i,x:=range nums{//i是数组下标,x是值
		if p,ok:=hashTable[target-x];ok{
			return []int{p,i}
		}
		hashTable[x]=i
	}
	return nil
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值