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]。我不确定是什么问题。
答案 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 []