LeetCode 1. two sum

Posted cowpea

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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题我就会举白旗。

以上是关于LeetCode 1. two sum的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode] 1 Two Sum

[LeetCode] 1 Two Sum

LeetCode之371. Sum of Two Integers

leetcode 1.Two sum

Leetcode 1. Two Sum (Python)

LeetCode #1 - Two Sum