两个和python解决方案

时间:2018-06-07 14:18:19

标签: python-3.x algorithm

class Solution:
def twoSum(self, nums, target):
    """
    :type nums: List[int]
    :type target: int
    :rtype: List[int]
    """
    for i in nums:
        j=target-i 
        if ((j in nums)==True and (nums.index(j) != nums.index(i))):
            return [nums.index(i), nums.index(j)]

它通过了列表[2,7,11,15]而不是[3,3]。我不确定是什么问题。

3 个答案:

答案 0 :(得分:1)

另一个解决方案可能是:

def two_sum(nums, target):
    d = {}
    for i in range(len(nums)):
        x = nums[i]
        if target - x in dict:
            return (d[target - x] + 1, i + 1)
        d[x] = i
    return None

答案 1 :(得分:0)

这有效,可以一次完成:

import 'package:angular/angular.dart';

@Directive(
  selector: '[clickOutside]'
)
class ClickOutsideDirective {

  @HostListener('click', [r'$event.target'])
  void onClick(targetElement){
    print('Target:' + targetElement.toString());
  }
}

答案 2 :(得分:0)

我找到了解决这个问题的 3 种主要方法,第一种方法是暴力破解,时间复杂度为 O(n^2),空间复杂度为 O(1):

def twoNumberSum(array, targetSum):
    for i in range(0, len(array)):
        for j in range(i+1, len(array)):
            if array[i] + array[j] == targetSum:
                return ([array[i], array[j]])
    return []

第二种方法是使用时间复杂度为 O(n) 和空间复杂度为 O(n) 的哈希映射:

def twoNumberSum(array, targetSum):
    matches = {}
    for number in array:
        match = targetSum - number
        if match in matches:
            return [match, number]
        else:
            matches[number] = True
    return []

第三种方法是使用左右两个指针。该方法的时间复杂度为O(nlogn),空间复杂度为O(1):

def twoNumberSum(array, targetSum):
    array.sort()
    left = 0
    right = len(array) - 1
    while left < right:
        if array[left] + array[right] == targetSum:
            return [array[left], array[right]]
        elif array[left] + array[right] < targetSum:
            left +=1
        elif array[left] + array[right] > targetSum:
            right -=1
    return []