go语言版-两数之和,三数之和的问题

两数之和

//两数之和
//1暴力解法,两个for循环O(n^2)
//2利用map存储补数
func twoSum(nums []int,target int)[]int{
	maps := make(map[int]int)
	for index,value := range nums {
		member := target - value
		if _,err := maps[member] ; err {
			return []int{index,maps[member]}
		}else {
			maps[value] = index
		}
	}
	return []int{}
}

三数之和

//三数之和
func threeNum(nums []int,target int)[][]int {
	if len(nums) < 3 {
		return [][]int{}
	}
	//排序
	sort.Ints(nums)
	result := [][]int{}
	for i := 0 ;i < len(nums) ;i++ {
		if i < len(nums) -2 && nums[i] - nums[i+1] == 0{
			continue
		}
		j := i+1
		k := len(nums)-1
		for j<k  {
			tempNum := nums[i] + nums[j] + nums[k]
			if tempNum < target {
				j++
			}
			if tempNum> target {
				k--
			}
			if tempNum == target {
				fmt.Println(nums[i] , nums[j] , nums[k])
				result = append(result,[]int{nums[i] , nums[j] , nums[k]})
				for j<k && nums[j] == nums[j+1] {
					j++
				}
				for j<k && nums[k] == nums[k-1]  {
					k--
				}
				j++
				k--
			}
		}
	}
	return result
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值