力扣题库第一题:两数之和

两数之和

题目描述

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

你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

提示:

2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
只会存在一个有效答案

进阶:你可以想出一个时间复杂度小于 O(n2) 的算法吗?

解题方法

暴力方法 - 循环遍历 - 时间复杂度O(n2)

  1. 思路

    这种方法比较简单,就是通过两层循环进行解题,在外层循环中,我们首先用target的值减去当前的元素,再在里层循环中找出和这个差值相等的元素,得到两个偏移即可。注意在循环的过程中(Python语言)要使用偏移,而不是直接循环元素值。

  2. 代码

python 复制代码
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            minus = target - nums[i]
            for j in range(i+1, len(nums)):
                if nums[j] == minus:
                    return [i, j]

使用哈希表 - 时间复杂度O(n)

  1. 思路

    我们将key的值存储为nums数组中的每一个元素,将key对应的value存储为元素对应的索引,这样在便利整个nums数组的时候,如果target - 当前的元素在哈希表中 ,那么说明已经找到了符合题意的两个数,将偏移返回即可,如果target - 当前的元素不在哈希表中,则说明还没有找到符合题意的两个数,这时候将值和索引存入哈希表。即{值: 偏移},这样我们既可以快速地找到满足题意的数,还能方便地找到数对应的偏移,一举两得。

  2. 代码

python 复制代码
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        map = {}
        for offset, num in enumerate(nums):
            if target - num in map:
                return [offset, map[target - num]]
            else:
                map[num] = offset

总结

当我们做题的时候,可以先考虑使用最简单的暴力解法进行解题,然后可以思考使用高时间效率的方法,如果实在没有思路可以查看大佬的解法,这样有利于提高自己的编程能力。拜拜~

相关推荐
try2find20 分钟前
安装llama-cpp-python踩坑记
开发语言·python·llama
博观而约取1 小时前
Django ORM 1. 创建模型(Model)
数据库·python·django
精灵vector3 小时前
构建专家级SQL Agent交互
python·aigc·ai编程
Zonda要好好学习3 小时前
Python入门Day2
开发语言·python
Vertira3 小时前
pdf 合并 python实现(已解决)
前端·python·pdf
太凉3 小时前
Python之 sorted() 函数的基本语法
python
项目題供诗3 小时前
黑马python(二十四)
开发语言·python
晓13134 小时前
OpenCV篇——项目(二)OCR文档扫描
人工智能·python·opencv·pycharm·ocr
是小王同学啊~4 小时前
(LangChain)RAG系统链路向量检索器之Retrievers(五)
python·算法·langchain
AIGC包拥它4 小时前
提示技术系列——链式提示
人工智能·python·langchain·prompt