给定一个升序的整数数组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}
总结 以上是内存溢出为你收集整理的两数之和(升序整数数组)-基于Go全部内容,希望文章能够帮你解决两数之和(升序整数数组)-基于Go所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)