• 1两数之和


    题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

    思路:
    1.暴力破解,两重循环 Time:O(n
    2.使用字典模拟哈希查找,用dict.get()直接获取 (targe-第一个数),用空间换时间 Time:O(n)。
    3.用列表查找 Time:O(n)

    • num2 in nums,返回 True 说明有戏
    • nums.index(num2),查找 num2 的索引

    法一:字典

    两遍循环,记录了 num1 和 num2 的值和位置,而省了再查找 num2 索引的步骤。
    tip:在建立字典的第一个for循环中,如果nums中有重复的数字,则for循环完成后,会保存最后一个重复的数字的索引为值。 在第二个循环查找j = hashmap.get(target - num)时,如果nums = [3,7,8,9,3],target =6,则这里j的值是最后一个3的索引,即4. 第二个for循环先遍历到第一个3,即i=0,此时i !=j因而返回[0,4]。 即在第二个for循环中已经内涵对重复数字的判断操作。

    #python 
    def twoSum(nums, target):
        hashmap={}
        for ind,num in enumerate(nums):
            hashmap[num] = ind
        for i,num in enumerate(nums):
            j = hashmap.get(target - num)
            if j is not None and i!=j:
                return [i,j]
    
    

    法二:字典

    边循环边查找,mum2 不需要在整个 dict 中去查找。可以在 num1 之前的 dict 中查找,因此就只需要一次循环可解决。

    #python
    def twoSum(nums, target):
        hashmap={}
        for i,num in enumerate(nums):
            if hashmap.get(target - num) is not None:
                return [i,hashmap.get(target - num)]
            hashmap[num] = i #这句不能放在if语句之前,解决list中有重复值或target-num=num的情况
    
    

    Links:
    【1】python 字典
    【2】pyhton 列表
    【3】python enumerate关键字
    enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

    enumerate(sequence, [start=0])

  • 相关阅读:
    安装chrome driver(14)
    爬虫-selenium实现验证码自动登录(14)
    爬虫-反爬与反反爬(12)
    爬虫-模拟登录(13)
    爬虫-GIL与线程同步问题(11)
    爬虫-多进程(10)
    爬取csdn的数据与解析存储(9)
    Exchange Server 2016邮件系统建设方案
    Exchange 2016高可用及容灾架构选型参考
    Installing Exchange 2016 on Windows Server 2016 Step by Step
  • 原文地址:https://www.cnblogs.com/centralpark/p/12918010.html
Copyright © 2020-2023  润新知