zoukankan      html  css  js  c++  java
  • LeetCode 1. two sum

    群里有人发起一起刷 LeetCode, 那我也来刷刷题,看能刷几道。第一道都不简单啊,对于我来说。

    two sum

    看了一眼觉得很简单,双向同时开始查,不就好了么。然而……

    1
    class Solution:
        def twoSum(self, nums, target):
            """
            :type nums: List[int]
            :type target: int
            :rtype: List[int]
            """
            for i in nums:
                for j in nums[::-1]:
                    if i+j == target:
                        return [nums.index(i),nums.index(j)]
    
    
    nums = [2, 7, 11, 15]
    target = 9
    print(Solution().twoSum(nums,target))
    
    • 反向列表 [::-1], 步长-1
    • list.index(obj) 从列表中找出某个值第一个匹配项的索引位置

    error:

    Input:
    [3,2,4]
    6
    Output:
    [0,0]
    Expected:
    [1,2]
    

    输出[0,0],预期应该是[1,2],内层循环到头了,取到第一个3。所以应该循环到外层键的左侧。

    2
    for r,i in zip(range(len(nums)),nums):
                for j in nums[:r:-1]:
                    if i+j == target:
                        return [nums.index(i),nums.index(j)]
    

    由于我不知道怎么能循环值的时候循环出索引0,1,2之类的,所以用了range zip生成。

    error:

    Input:
    [3,3]
    6
    Output:
    [0,0]
    Expected:
    [0,1]
    

    因为我用index()取位置的缘故。好好的取索引吧!

    3
    for k,v in enumerate(nums):
                for k2,v2 in enumerate(nums):
                    if k2<=k:
                        continue
                    if v+v2 == target:
                        return [k,k2]
    

    英文版的AC了,但是中文的有超时

    [0,2,4,6,...,25194,25196]
    16021
    

    注:这个列表太大,60k,我放到文件里
    测试数据

    放本地跑是可以出结果的

    [8010, 8011]
    

    再想一想,优化一下,自己菜的抠脚不能小瞧每一道题啊,记得别的OJ平台第一个都是hello world级别,两数相加。

    4
    for k,v in enumerate(nums):
                other_num = target-v
                if other_num in nums:   
                    t_k = nums.index(other_num)
                    if k!=t_k:
                        return [k,t_k]
    

    这次用的思路是,看另外一个值在不在列表里,在的话找索引与当前索引比对,相同就继续找,不同就找出来了。 bingo!

    总结: Python 刚学,好多语法糖都不会用。算法也没有研究。感觉不到10题我就会举白旗。

  • 相关阅读:
    FCKEditor装入模板方法
    医道再解开阖枢
    测试一下 Last
    [技术架构] 大型互联网站解决高并发的常见策略
    swfupload实现图片及缩略图上传
    解决“在证书存储区中找不到清单签名证书”
    asp.net EnableViewState禁用与注意事项
    jQuery创建水平和垂直居中的div窗口
    甩掉ashx/asmx,使用jQuery.ajaxWebService请求WebMethod,Ajax处理更加简练
    type="button" ,"submit" 的区别(转)
  • 原文地址:https://www.cnblogs.com/warcraft/p/9344674.html
Copyright © 2011-2022 走看看