时间和空间复杂度参考博客:https://blog.youkuaiyun.com/jsjwk/article/details/84315770
https://www.jianshu.com/p/1ac6ad4069f8
时间复杂度:考虑最高的,比如n^2+n,那它的时间复杂度就是n^2
空间复杂度:看辅助变量(一些常量)占用的临时内存
题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
思路:在做题中,先想到一般的方法两个for循环算法复杂度为,但是可以把复杂度降低为nlog(n),首先采用快排将无序的数组变成有序数组,然后设置left,right两个指针,直到找到nums[left]+nums[right]=target为止,这样找的过程中复杂度为n,因此最终的算法复杂度为nlog(n).一定要思考什么时候结束循环,当left=right的时候结束,因为我们是要找两个数加起来等于target,因此 while left<right.
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
if nums is None or len(nums) <= 1:
return None
nums_index_pairs = [(num, index) for index,num in enumerate(nums)]
nums_index_pairs.sort()
begin = 0
end = len(nums)-1
while begin < end:
now_sum = nums_index_pairs[begin][0] + nums_index_pairs[end][0]
if now_sum == target:
return [nums_index_pairs[begin][1], nums_index_pairs[end][1]]
if now_sum > target:
end -= 1
else:
begin += 1