当前位置: 首页 > news >正文

LeetCode 1 两数之和

题目描述

链接:https://leetcode.cn/problems/two-sum/?envType=featured-list&envId=2ckc81c?envType=featured-list&envId=2ckc81c

难度:简单

给定一个整数数组 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) 的算法吗?

解法

  1. 暴力解法

首先拿到数组第一个元素,然后一次向后遍历数组知道和满足要求的。如果第一个元素没找到,再拿到第二个元素,依次向后遍历找到和满足要求的。所以共有两层遍历。

python

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

复杂度分析

时间复杂度: O(n2)
空间复杂度:O(1)

  1. 哈希优化

上面解法时间复杂度较高,效率很慢。可使用哈希表来优化算法,以空间换时间。

首先创建一个哈希表,用来维护值数组的元素值和索引的对应关系。然后还是依次遍历数组,先从哈希表中找到与当前元素相加为指定和的索引,找到则返回索引,没找到的话维护值和索引到哈希表中,继续遍历。

python

class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:hashtable = dict()for i, num in enumerate(nums):if target - num in hashtable:return [hashtable[target - num], i]hashtable[num] = ireturn []

上面这中解法只要遍历一遍即可。

复杂度

时间复杂度: O(n)
空间复杂度:O(n)

http://www.lryc.cn/news/194136.html

相关文章:

  • 【opencv】windows10下opencv4.8.0-cuda Python版本源码编译教程
  • 【1day】用友U8Cloud未授权访问漏洞学习
  • 基于单片机智能汽车仪表设计系统
  • java double 保留两位小数
  • 计网第六章(应用层)(三)(文件传输协议FTP)
  • 微信小程序canvas画布绘制base64图片并保存图片到相册中
  • Hadoop3教程(八):MapReduce中的序列化概述
  • Flash-Attention
  • 发布npm包质量分测试
  • 基于适应度相关优化的BP神经网络(分类应用) - 附代码
  • 复杂网络 | 利用复杂网络预测城市空间流量
  • 【1】c++11新特性(稳定性和兼容性)—>原始字面量
  • 学习pytorch13 神经网络-搭建小实战Sequential的使用
  • TCP发送接口(如send(),write()等)的返回值与成功发送到接收端的数据量无直接关系
  • 【Python、Qt】使用QItemDelegate实现单元格的富文本显示+复选框功能
  • 【JVM】JVM类加载机制
  • 【面试经典150 | 区间】汇总区间
  • 主流接口测试框架对比
  • LeetCode 150.逆波兰表达式求值
  • 华为---企业WLAN组网基本配置示例---AC+AP组网
  • 循环结构的运用
  • 深度强化学习第 1 章 机器学习基础
  • 第一章 STM32 CubeMX (CAN通信发送)基础篇
  • 原子性操作
  • 论文阅读:Segment Any Point Cloud Sequences by Distilling Vision Foundation Models
  • Netty 入门 — 亘古不变的Hello World
  • idea插件开发javax.net.ssl.SSLException: No PSK available. Unable to resume.
  • Selenium的WebDriver操作页面的超时或者元素重叠引起的ElementClickInterceptedException
  • oracle数据库的缓存设置
  • 算法通关村第一关-链表青铜挑战笔记