zoukankan      html  css  js  c++  java
  • 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
     
  • 相关阅读:
    Swift编码总结4
    Swift编码总结3
    无题
    WebSocket桌面客户端工具
    Dell U2913WM使用感受
    Oracle DB 12c first glance
    [翻译] Oracle Database 12c 新特性Multitenant
    一眨眼oracle 12c也有了
    .Net内存泄露原因及解决办法
    .NET 强引用和弱引用
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/13194933.html
Copyright © 2011-2022 走看看