• 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]。

  • 相关阅读:
    【数据结构】线性表&&顺序表详解和代码实例
    【智能算法】超详细的遗传算法(Genetic Algorithm)解析和TSP求解代码详解
    【智能算法】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题 (TSP, Traveling Salesman Problem)
    【智能算法】迭代局部搜索(Iterated Local Search, ILS)详解
    10. js时间格式转换
    2. 解决svn working copy locked问题
    1. easyui tree 初始化的两种方式
    10. js截取最后一个斜杠后面的字符串
    2. apache整合tomcat部署集群
    1. apache如何启动
  • 原文地址:https://www.cnblogs.com/myal/p/10831396.html
Copyright © 2020-2023  润新知