资讯专栏INFORMATION COLUMN

从数组中寻找和的相加数

Astrian / 856人阅读

摘要:从数组中寻找和的相加数思路这个题目简单,两个循环嵌套可以实现,但是考虑到输入数组长度大的情况下,时间复杂度太高使用索引,遍历一次后记录中所有数字出现的下标,用得到,然后直接查索引中的位置索引可以用数组,但是中可能会有大数

从数组中寻找和的相加数 Two Sum

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

example 1

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

example 2

Given nums = [0,4,3,0], target = 0,

Because nums[0] + nums[3] = 0 + 0 = 0,
return [0, 3].

example 3

Given nums = [-1,-2,-3,-4,-5], target = -8,

Because nums[2] + nums[4] = -3 + (-5) = -8,
return [2, 4].

example 4

Given nums = [0,1,2,3,4,5,...,28888,...,65432], target = 65432,

you should consider that time and space is limited.
思路

这个题目简单,两个for循环嵌套可以实现,但是考虑到输入数组长度大的情况下,时间复杂度太高, O(n²)

使用索引,遍历一次后记录nums中所有数字出现的下标,用target - nums[i]得到j,然后直接查索引中j的位置

索引可以用list(数组),但是nums中可能会有大数字,所需的空间太多,并且会有负数,改用dir,key为nums[i],value为i

同时给出简单版代码(简单版在java,C等语言在leetcode网站可以AC,但python会超时)

代码

优化版

class Solution:

    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        idx_set = {}
        for i, item in enumerate(nums):
            idx = target - nums[i]
            if idx in idx_set:
                j = idx_set[idx]
                if len(j) != 0 and j[0] != i:
                    return list([i, j[0]])
                if j[0] == i and len(j) > 1:
                    return list([i, j[1]])
            else:
                idx_set[item] = [i]

简单版

class Solution:

    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        for i in range(len(nums)):
            for j in range(i+1, len(nums)):
                if nums[i] + nums[j] == target:
                    return list([i, j])

本题以及其它leetcode题目代码github地址: github地址

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38674.html

相关文章

  • LeetCode 2:两相加 Add Two Numbers

    摘要:给出两个非空的链表用来表示两个非负的整数。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。需要考虑到两个链表长度不同时遍历方式链表遍历完成时最后一位是否需要进一位。 ​给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 ...

    diabloneo 评论0 收藏0
  • LeetCode 2:两相加 Add Two Numbers

    摘要:给出两个非空的链表用来表示两个非负的整数。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。需要考虑到两个链表长度不同时遍历方式链表遍历完成时最后一位是否需要进一位。 ​给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 ...

    Towers 评论0 收藏0
  • Leetcode724:寻找心索引(java、python3)

    摘要:寻找数组的中心索引给定一个整数类型的数组,请编写一个能够返回数组中心索引的方法。同时也是第一个符合要求的中心索引。示例输入输出解释数组中不存在满足此条件的中心索引。说明的长度范围为。 寻找数组的中心索引 给定一个整数类型的数组 nums,请编写一个能够返回数组中心索引的方法。 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。 如果数组不存在中心...

    Keven 评论0 收藏0
  • Leetcode724:寻找心索引(java、python3)

    摘要:寻找数组的中心索引给定一个整数类型的数组,请编写一个能够返回数组中心索引的方法。同时也是第一个符合要求的中心索引。示例输入输出解释数组中不存在满足此条件的中心索引。说明的长度范围为。 寻找数组的中心索引 给定一个整数类型的数组 nums,请编写一个能够返回数组中心索引的方法。 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。 如果数组不存在中心...

    aaron 评论0 收藏0
  • 70道前端LeetCode题目集合及视频讲解(持续更新...)

    前端LeetCode刷题 下面是已刷的题目的目录。GitHub:https://github.com/cunzaizhuy...每日打卡更新中,欢迎关注。 数组类 26 删除排序数组中的重复项 27 移除元素 35 搜索插入位置 66 加1 80 medium 删除排序数组中的重复项2 88 合并两个有序数组 167 两数之和II - 输入有序数组 118 杨辉三角 169 easy 求众数 1...

    mayaohua 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<