zoukankan      html  css  js  c++  java
  • LeetCode 1. 两数之和

    题目:

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

    你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

    示例:

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

    因为 nums[0] + nums[1] = 2 + 7 = 9

    所以返回 [0, 1]


    思路:

    方法一:

    有2个情况要考虑,一个是正常的a+b=target,另一个是a+a=target。
    通过target减去list内部数字,判断是否存在作为过滤条件
    1)index数量大于等于2,index相同的元素不能使用2次
    2)为了保证顺序,减数的index要比当前的i值大。
    最后把index就存到新的list里面即可

    class Solution(object):
       def twoSum(self, nums, target):
           list = []
           i = 0
           while i < len(nums):
               while target-nums[i] in nums:
                   if nums.count(target-nums[i])>=2:
                       if len(list) ==2:
                           break
                       else:
                           list.append(i)
                   else:
                       if nums.index(target-nums[i])>i:
                           list.append(i)
                           list.append(nums.index(target-nums[i]))
                   break
               i +=1
           return list
    

    --执行结果
    执行用时 :1232 ms, 在所有 Python 提交中击败了38.06%的用户
    内存消耗 :13.4 MB, 在所有 Python 提交中击败了6.17%的用户

    方法二:

    因为方法一的用时相对有些多,所以参考大牛们的意见采用key value的字典模拟hashmap去筛选过滤。
    字典依次遍历按照value index的方式存入新的dic,当遍历dic找到target - value的值时返回当前dic中保存符合的index和当前的index,即符合题目要求

    class Solution(object):
    def twoSum(self, nums, target):
        dic = {}
        for i, value in enumerate(nums):
            if target - value in dic:
                return [dic[target - value], i] 
            dic[value] = i
    

    执行用时 :36 ms, 在所有 Python 提交中击败了73.27%的用户
    内存消耗 :14.3 MB, 在所有 Python 提交中击败了6.17%的用户

    总结:

    本以为这个题目很简单,没想到花了我不少时间去思考用时问题,第一时间想起来的方式就是通过列表去做这个事情,没想到用dic 更省时间,下决心要好好刷leet code练习自己的解题思路还有时间算法处理能力,加油。

  • 相关阅读:
    理解Javascript_13_执行模型详解
    vs2005的快捷键
    去除 VS.Net 2003 项目的 VSS 息的脚本
    VS2005的隐藏快捷键
    程序员,你离坐牢还有多远
    对路径XXX的访问被拒绝(文件操作权限)的解决方法
    安装VS2005 SP1之后无法更改或卸载VS2005的处理方法
    强大的.NET反编译工具Reflector及插件
    反编译工具Reflector下载(集成两个常用.net插件,FileGenerator和FileDisassembler)
    两种彻底删除VIEWSTATE的方法
  • 原文地址:https://www.cnblogs.com/xiaoqiangink/p/12841084.html
Copyright © 2011-2022 走看看