56. 两数之和

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
 
posted @ 2020-06-26 14:30  风不再来  阅读(142)  评论(0编辑  收藏  举报