感觉只能遍历 N方的复杂度。
如果想排序 排序已经NlnN了 之后彷佛没有简单很多。
但是答案想要小于N方 那么我还是排序
又遇到了问题 排序后怎么知道原来的下标呢? 排序就把原来下标弄丢了 ,想记录的话又需要一个数组来 。
但是我看到只有一个答案 说明数组肯定不重复 那么 就简单了 遍历呗。
解答如下:
class Solution(object): def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ rel = [] nums2 = sorted(nums) #将数组排序 high = len(nums2)-1 low = 0 while low<high: #从头尾开始 如果头尾之和小于目标 就头挪挪 大于目标就挪挪 最终找到那两个元素 if nums2[low]+nums2[high] == target: break elif nums2[low]+nums2[high] > target: high -= 1 else: low += 1 for i in range(len(nums)): #因为答案只有一个 说明没有重复的元素 所以才敢采取这种遍历方法 if nums[i] == nums2[low] : rel.append(i) elif nums[i] == nums2[high] :# 这里的else十分的精髓 避免了两个结果元素值一模一样的情况。如【3,3】->6 rel.append(i) if len(rel) == 2: return rel 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/two-sum/solution/6865-bu-zhi-dao-kuai-pai-ying-bu-ying-ga-jn1q/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。