都做不出来”"/>
“有人相爱,有人夜里开车看海,有人LeetCode第一题都做不出来”
刷LeetCode真是太好了
仅以此篇作为记录LeetCode征程的开始!
后续不定时更新,主要是取决于能刷的出来不 🤣
路漫漫其修远兮,吾将上下而求索。
文章目录
- 刷LeetCode真是太好了
- 前言
- 一、两数之和(twoSum)
- 1.问题描述
- 2.示例
- 示例 1:
- 示例 2:
- 示例 3:
- 二、解题分析
- 1.元素重复性
- 2.数据类型的选择
- 三、代码及运行结果
- 1. 代码
- 2.运行结果
- 示例 1:
- 示例 2:
- 示例 3:
- 四、运行耗时和内存消耗
- 五、总结
前言
众所周知: 程序 = 算法 + 数据结构。熟悉常见的算法和数据结构有助于我们优化代码,提高程序的效率、节省时间和内存空间。
本文以LeetCode第一题为例,来记录笔者在学习进阶时的疑惑与成长。
一、两数之和(twoSum)
1.问题描述
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值的那两整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
2.示例
-
示例 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]
二、解题分析
1.元素重复性
- 数组内的每个元素只能作为一个加数,即target不能由nums里同一下标的元素两次相加所得。
- 数组内的元素可以重复,即nums里面可以出现重复的两个数字。
2.数据类型的选择
- 字典的键是唯一的,可以创建一个空字典,用于存储元素的下标与值。
- 在字典中查看,target - nums[i]是否存在:
a. 如果不存在,将i和nums[i]以键值对添加到 字典中
b. 如果存在,在遍历字典中的键,找到值为target - nums[i]对应的键。
三、代码及运行结果
1. 代码
class Solution(object):def twoSum(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[int]"""n = len(nums)# 创建空字典用于存储列表元素的下标和值dic = {}# 遍历下标for i in range(n):#在字典的值中,查找到另外一个加数if target-nums[i] not in dic.values():# 如果不在,就将当前下标为i的元素的值和索引,作为键值对存储到字典中dic[nums[i]] = ielse:# 如果在,就返回当前遍历的下标i和字典中target-nums[i]对应的值return [i,dic[target-nums[i]]]
2.运行结果
示例 1:
nums = [2,7,11,15], target = 9
示例 2:
nums = [3,2,4], target = 6
示例 3:
nums = [3,3], target = 6
四、运行耗时和内存消耗
五、总结
灵活运用判断条件,熟知各数据结构的特点,可以使我们代码更简洁、高效。
更多推荐
“有人相爱,有人夜里开车看海,有人LeetCode第一题都做不出来”
发布评论