首页 > 其他 > 详细

LeetCode 1. two sum

时间:2018-07-21 00:35:49      阅读:236      评论:0      收藏:0      [点我收藏+]

群里有人发起一起刷 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题我就会举白旗。

LeetCode 1. two sum

原文:https://www.cnblogs.com/warcraft/p/9344674.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!