美文网首页
leetcode 1 遍历算法

leetcode 1 遍历算法

作者: 在做算法的巨巨 | 来源:发表于2018-09-05 19:20 被阅读0次

    1. 两数之和

    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

    你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

    示例:

    给定 nums = [2, 7, 11, 15], target = 9

    因为 nums[0] + nums[1] = 2 + 7 = 9
    所以返回 [0, 1]

    思路:

    如果不考虑数组是否是有序数组还是无序数组,就采用array遍历的方法,这里需要避免重复遍历,时间复杂度是O(n^2)

    class Solution(object):
        def twoSum(self, nums, target):
            """
            :type nums: List[int]
            :type target: int
            :rtype: List[int]
            """
            for i in range(len(nums)-1):
                for j in range(i+1, len(nums)):
                    if nums[i] + nums[j] == target:
                        return([i,j])
    

    这种方法是通过牺牲时间换取空间,也可以尝试下面的方法,通过构建哈希表,不断的向里边插入值和index。通过牺牲空间来换取时间。

    思路:
    class Solution(object):
        def twoSum(self, nums, target):
            """
            :type nums: List[int]
            :type target: int
            :rtype: List[int]
            """
            table = []
            for i in range(len(nums)):
                complement = target - nums[i]
                if complement in table:
                    return(i, table.index(complement))
                table.append(nums[i])
    

    这里的时间复杂度是O(n)

    相关文章

      网友评论

          本文标题:leetcode 1 遍历算法

          本文链接:https://www.haomeiwen.com/subject/aywwwftx.html