LeetCode每日一题--两数之和II-输入有序数组
2020-03-15 18:21
295 查看
【前言】坚持日更LeetCode刷题系列
不积跬步,无以至千里;不积小流,无以成江海。愿与诸君共勉!
【题目】136.只出现一次的数字
题目描述:给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函
数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。
说明:
返回的下标值(index1 和 index2)不是从零开始的。
你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。
示例:
示例 1: 输入: numbers = [2, 7, 11, 15], target = 9 输出: [1,2] 解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。
思路一:首先,我们还是来用暴力求解的方法来思考此题。具体步骤如下:
1.建立两个循环来遍历数组
2.如果两个index不相等(排除相同的数相加)并且对应index下的数相加为target,则返回列表。
具体代码如下:
class Solution(object): def twoSum(self, numbers, target): """ :type numbers: List[int] :type target: int :rtype: List[int] """ result_list = [] for i in range(len(numbers)): for j in range(len(numbers)): if(i!=j and numbers[i]+numbers[j]==target): result_list.append(i+1) result_list.append(j+1) return result_list
运行结果:出现了
超时错误,采用两层循环的方式,时间复杂度为O(n^2),因此对于过长的列表时,会出现超时的现象。
思路二:可参考我这篇中利用字典存储,模拟哈希表解决此题。具体代码如下:
class Solution(object): def twoSum(self, numbers, target): """ :type numbers: List[int] :type target: int :rtype: List[int] """ hashmap = {} #因为我们想得到index,所以我们将num作为键 for index,num in enumerate(numbers): another_num = target - num if(another_num in hashmap): return [hashmap[another_num]+1,index+1] #注意return时两个index的顺序 else: hashmap[num] = index return None
运行结果:
思路三:很显然官方是不会出两个一样的题的,那么题目中还有一个重点标记的条件
升序排列,那么我们应该如何去利用这个条件呢?我首先想到的是二分查找的方式,并且在题解中看到了一个前辈的关于二分详细的思考,于是直接引出大佬链接就好了,有兴趣的朋友可以去了解下。
关于其中一些知识的链接:
二分姿势
分享就到这里了,欢迎大家一起交流讨论。
注明:
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted
- 点赞 1
- 收藏
- 分享
- 文章举报
相关文章推荐
- [leetcode]两数之和 II - 输入有序数组[javascript]
- leetcode167(两数之和 II - 输入有序数组)
- 【Leetcode】167. 两数之和II - 输入有序数组
- [LeetCode] Two Sum II - Input array is sorted 两数之和之二 - 输入数组有序
- leetcode160 两数之和 II - 输入有序数组--解法
- leetcode 167. 两数之和 II - 输入有序数组
- [Python LeetCode] 167. 两数之和 II - 输入有序数组(yangyang)
- leetcode java 167. 两数之和 II - 输入有序数组
- 【leetcode系列】167. 两数之和 II - 输入有序数组
- 两数之和 II - 输入有序数组 - LeetCode
- leetcode167. 两数之和 II - 输入有序数组
- LeetCode - 167. 两数之和 II - 输入有序数组
- Leetcode题库-两数之和 II - 输入有序数组(java语言版)
- LeetCode 167. 两数之和 II - 输入有序数组 Python
- LeetCode167. 两数之和 II - 输入有序数组(java)
- leetcode 两数之和 II - 输入有序数组 python
- leetcode167. 两数之和 II - 输入有序数组
- 【LeetCode】Python实现-167. 两数之和 II - 输入有序数组
- 算法集 LeetCode 167 两数之和II - 输入有序数组
- leetcode167: 两数之和 II - 输入有序数组