56. 两数之和
中文English
给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。
你需要实现的函数twoSum
需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 0 到 n-1。
样例
Example1:
给出 numbers = [2, 7, 11, 15], target = 9, 返回 [0, 1].
Example2:
给出 numbers = [15, 2, 7, 11], target = 9, 返回 [1, 2].
挑战
给自己加点挑战
- O(n)O(n) 空间复杂度,O(nlogn)O(nlogn) 时间复杂度,
- O(n)O(n) 空间复杂度,O(n)O(n) 时间复杂度,
注意事项
你可以假设只有一组答案。
输入测试数据 (每行一个参数)如何理解测试数据?
背向型双指针用法:
class Solution: """ @param numbers: An array of Integer @param target: target = numbers[index1] + numbers[index2] @return: [index1, index2] (index1 < index2) """ def twoSum(self, numbers, target): # write your code here #列一个列表 numbers = [[value, index] for index, value in enumerate(numbers)] numbers = sorted(numbers) l = len(numbers) left, right = 0, l - 1 while left < right: if numbers[left][0] + numbers[right][0] < target: left += 1 elif numbers[left][0] + numbers[right][0] > target: right -= 1 else: if numbers[left][1] < numbers[right][1]: return [numbers[left][1], numbers[right][1]] else: return [numbers[right][1], numbers[left][1]]
第二种写法:
如果存在4,4,目标8,则循环到第二个相同的时候,在return,index避免一样(针对两个数相同的情况)
class Solution: """ @param numbers: An array of Integer @param target: target = numbers[index1] + numbers[index2] @return: [index1, index2] (index1 < index2) """ def twoSum(self, numbers, target): # write your code here l = len(numbers) for i in range(l): if (target - numbers[i]) in numbers: j = numbers.index(target - numbers[i]) if i > j: return [j, i] elif i < j: return [i, j]
607. 两数之和 III-数据结构设计
中文English
设计b并实现一个 TwoSum 类。他需要支持以下操作:add
和 find
。add
-把这个数添加到内部的数据结构。find
-是否存在任意一对数字之和等于这个值
样例
样例 1:
add(1);add(3);add(5);
find(4)//返回true
find(7)//返回false
class TwoSum: """ @param number: An integer @return: nothing """ def __init__(self): self.dic = [] def add(self, number): # write your code here self.dic.append(number) """ @param value: An integer @return: Find if there exists any pair of numbers which sum is equal to the value. """ def find(self, value): # write your code here l = len(self.dic) for i in range(l): if value - self.dic[i] in self.dic: j = self.dic.index(value - self.dic[i]) if i != j: return True return False