zoukankan      html  css  js  c++  java
  • Python3学习笔记37-LeetCode刷题

    LeetCode中国官网一个用来刷编程题的网站,收录了很多面试题。感觉还是学习到很多。记录一下思路。代码还是要多敲。

    建议编写完后直接在LeetCode上运行和提交。提交时会有不同的测试用例来测试代码。可以查遗补漏。

    1)两数之和

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

    你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

    示例:

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

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

    最简单的直接两个循环暴力解决。

    class Solution(object):
        def twoSum(self, nums, target):
            num = len(nums)
            for i in range(num):
                for j in range(i+1,num):
                    if nums[i] + nums[j] == target:
                        return [i,j]
    
    if __name__ == '__main__':
        n = [3,2,4]
        tar = 6
        s = Solution()
        a = s.twoSum(n,tar)
        print(a)

    没有啥可多说的,就是第一层循环所有,第二层从第一层所在的下标后一位开始。然后相加看是不是等于某个值,然后返回下标。在LeetCode提交时候,提示用时4172ms

    之后看到官方和别人的解题思路,可以使用字典来提高效率class Solution(object):

    def twoSum(self, nums, target):
    
            nub = len(nums)
            dict1 = {}
            for i in range(nub):
                value = target - nums[i]
                if value in dict1:
                    return [dict1[value],i]
                dict1[nums[i]] = i
    
    if __name__ == '__main__':
        n = [3,2,4]
        tar = 6
        s = Solution()
        a = s.twoSum(n,tar)
        print(a)
    思路是将数组的值当做字典的键,数组的下标当做字典键。循环 i 就是数组当前值得下标。求合值减去当前值,算出另一个数的值。如果这个值是字典里存在的键。就返回键在字典中对应的值,和 i 。最后是将数组的值添加到字典里面。用时56ms

    需要注意的是,一定要先判断一轮,再将值写入字典。以上图为例,如果先写入字典。下标0的时候,值是3。另一个需要的数也是3.这时候去字典里找第一个就是3.输出就会是[0, 0] ,但是正确的应该是[1, 2]。

  • 相关阅读:
    window.location.href的用法
    echarts折线图阴影设置
    SVN使用教程图文教程
    jksj算法训练营-第二课02 时间复杂度和空间复杂度分析
    jkjj算法训练营笔记-第二课01 训练环境配置、编码技巧和code style
    MySQL 基础模块的面试题总结
    MySQL 事务的面试题总结
    MySQL 中锁的面试题总结
    MySQL 命令和内置函数
    MySQL 性能优化 & 分布式
  • 原文地址:https://www.cnblogs.com/myal/p/10831396.html
Copyright © 2011-2022 走看看