两数之和(升序整数数组)-基于Go

给定一个升序的整数数组numbers,从数组中找出两个数满足: 两数之和等于目标数target,且两个数不能是同一个数, 假设每个输入只对应唯一的答案,不能重复使用同一个元素(下标不能相同)。返回两数的下标。

  • 暴力破解,O(n2)
  • map打标记,O(n),但是空间复杂度也为O(n)
  • 二分查找(对于每一个x,找target-x是否在数组中),O(nlogn)
func solution(nums []int, target int)(int, int){
	var low = 0
	var high = len(nums)-1

	for i:=0;i<len(nums);i++{
		// low为其中的一个默认解
		low = i
		for low<high{
			mid := (high+low)/2

			if nums[mid] == target-nums[i]{
				return i, mid
			}else if nums[mid]>target-nums[i]{
				high = mid-1
			}else{
				low = mid+1
			}
		}
	}
	return -1,-1
}
  • 双指针(最优)
func solution2(nums []int, target int)(int, int){
	var low = 0
	var high = len(nums)-1

	for low<high{
		switch sum:=nums[low]+nums[high];{
		case sum==target:
			return low, high
		case sum<target://小了说明low小
			low++
		default://大了说明high大
			high--
		}
	}
	return -1, -1
}
原文地址:https://www.cnblogs.com/pangqianjin/p/14629296.html