【Golang】LeetCode-剑指Offer-面试题57-和为s的两个数字
2020-03-05 01:26
781 查看
题目
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。
如果有多对数字的和等于s,则输出任意一对即可。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[2,7] 或者 [7,2]
示例 2:
输入:nums = [10,26,30,31,47,60], target = 40
输出:[10,30] 或者 [30,10]
限制:
1 <= nums.length <= 10^5 1 <= nums[i] <= 10^6
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/he-wei-sde-liang-ge-shu-zi-lcof
解题思路
- 因为数组是递增序列,定义首位双指针,left 和 right
- 先用for循环或者二分法将大于目标值的数字全都排除
- for left < right 循环判断 双指针对应的数字相加等于目标值,返回双指针对应的数字 nums[left]+nums[right]==target
-
当 nums [ left ] > target - nums [ right ] 时,说明右边的值过大,right - 1
-
当 nums [ right ] > target - nums [ left ] 时,说明右边的值过大,right - 1
代码
–执行用时:220 ms --内存消耗:10.4 MB
func twoSum(nums []int, target int) []int { if nums==nil || len(nums)<2 { return nil } left:=0 right:=len(nums)-1 //大于目标值的数字全都排除 for nums[right]>target{ right-- } for left<right{ if nums[left]+nums[right]==target{ return []int{nums[left],nums[right]} } if nums[left]>target-nums[right]{ right-- }else{ left++ } //同理有,这里选择一种情况写即可,否则会出现错误 /* if nums[right]>target-nums[left]{ right-- }else{ left++ } */ } return nil }
在LeetCode该题中,我也有提交题解,欢迎查看。昵称:Sakura。
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 【Golang】LeetCode-剑指Offer-面试题46-把数字翻译成字符串
- 【Golang】LeetCode-剑指Offer-面试题62-圆圈中最后剩下的数字【约瑟夫环】
- 【Golang】LeetCode-剑指Offer-面试题57 - II - 和为s的连续正数序列【两种解法】
- 【Golang】LeetCode-剑指Offer-面试题44-数字序列中某一位的数字
- 剑指Offer-57 和为S的两个数字
- 【Golang】LeetCode-剑指Offer-面试题48-最长不含重复字符的子字符串
- 【Golang】LeetCode-剑指Offer-面试题07-重建二叉树
- 牛客剑指Offer面试题57:和为s的数字(题目1)
- 【剑指offer】面试题56(1):数组中只出现一次的两个数字
- 【剑指offer】6.3知识迁移能力——面试题41:和为s的两个数字VS和为s的连续正数序列
- 剑指Offer(57)和为S的两个数字
- 【Golang】LeetCode-剑指Offer-面试题38-字符串的排列
- 【Golang】LeetCode-剑指Offer-面试题65-不用加减乘除做加法【三种解法】
- 剑指offer-面试题41-和为s的两个数字VS和为s的连续正数序列
- 剑指offer——面试题41-2:和为S的两个数字
- 剑指offer——面试题41:(一)和为s的两个数字
- [剑指offer][面试题41]和为s的两个数字 VS 和为s的连续正数序列
- 剑指offer之面试题41和为s的两个数字VS和为s的连续正数序列
- 【Golang】LeetCode-剑指Offer-面试题61-扑克牌中的顺子【两种解法】
- 【剑指offer】面试题57(1):和为S的数字