leetcode-1 两数之和

感觉只能遍历 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十分的精髓  避免了两个结果元素值一模一样的情况。如【33】->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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

leetcode-1 两数之和

上一篇:pytest(5):setup和teardown的详细使用


下一篇:数据库—常用函数