两数之和
本文最后更新于39 天前,其中的信息可能已经过时,如有错误请发送邮件到zhangweihao22@outlook.com

题目:

给定一个整数数组 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
  • 只会存在一个有效答案

解答

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        num_dict = {}
        for i,num in enumerate(nums):
            complement = target - num
            if complement in num_dict:
                return [num_dict[complement],i]
            num_dict[num] = i

思路:

使用字典储存已经判断的数据,每次循环再在字典里面查找是否存在需要的差数,若存在,则返回循环的索引以及对应差值索引(这里对应差值在字典中的索引);若不存在,则将该次循环的值储存在字典中,以供下一次循环使用

学习到的内容:

1. enumerate()

将一个迭代对象转化成(一个包含序列和值的)枚举对象

基本语法

enumerate(iterable, start=0)
  • iterable:这是一个必需参数,代表要进行枚举的可迭代对象,例如列表、元组、字符串、集合、字典的键或值等。
  • start:这是一个可选参数,指定索引的起始值,默认值为 0。

返回值

enumerate() 函数返回一个枚举对象,该对象是一个迭代器,每次迭代会返回一个包含索引和对应元素的元组。

代码示例

# 示例列表
fruits = ['apple', 'banana', 'cherry']

# 不指定起始索引,默认从 0 开始
for index, fruit in enumerate(fruits):
    print(f"索引 {index} 对应的水果是: {fruit}")

print("\n")

# 指定起始索引为 1
for index, fruit in enumerate(fruits, start=1):
    print(f"索引 {index} 对应的水果是: {fruit}")

在上述代码中,第一个 for 循环使用 enumerate(fruits) 进行迭代,索引默认从 0 开始;第二个 for 循环使用 enumerate(fruits, start=1) 进行迭代,索引从 1 开始。

适用场景

1. 遍历列表并需要同时获取索引和元素

当你需要遍历一个列表,并且在处理元素的同时还需要知道元素的索引时enumerate() 函数就非常有用。例如,在更新列表中特定位置的元素时:

numbers = [10, 20, 30, 40, 50]
for index, num in enumerate(numbers):
    if num % 20 == 0:
        numbers[index] = num * 2

print(numbers)

在这个例子中,我们遍历 numbers 列表,当元素能被 20 整除时,将该元素的值乘以 2 并更新到原列表中。

2. 生成包含索引的字典

如果你想将一个列表转换为一个字典,其中键是元素的索引,值是元素本身,可以使用 enumerate() 函数:

colors = ['red', 'green', 'blue']
color_dict = {index: color for index, color in enumerate(colors)}
print(color_dict)

这里使用字典推导式结合 enumerate() 函数,将 colors 列表转换为一个字典,字典的键是颜色的索引,值是颜色名称。

3. 在循环中需要根据索引进行条件判断

有时候,你可能需要根据元素的索引来决定是否执行某些操作。例如,只处理列表中偶数索引位置的元素:

words = ['hello', 'world', 'python', 'programming']
for index, word in enumerate(words):
    if index % 2 == 0:
        print(f"处理偶数索引位置的单词: {word}")

在这个例子中,我们只处理 words 列表中偶数索引位置的单词。

4. 记录数据的位置信息

在处理数据时,可能需要记录每个数据在原始数据中的位置。例如,在分析文本时,记录每个单词在句子中的位置:

sentence = "Python is a powerful programming language"
words = sentence.split()
for index, word in enumerate(words):
    print(f"单词 '{word}' 在句子中的位置是 {index + 1}")

这里将句子拆分为单词列表,然后使用 enumerate() 函数记录每个单词在句子中的位置。

本题中出现了值和索引的绑定,因此选择使用这个函数

2. if … in …

in 是一个成员运算符,用来判断某个值是否为另一个可迭代对象的成员

可适用于:列表、字符串、集合、字典(注意,字典对应匹配的是键

基本语法

if value in iterable:
    # 如果 value 在 iterable 中,执行这里的代码块
    pass
else:
    # 如果 value 不在 iterable 中,执行这里的代码块
    pass
  • value:代表要检查的值。
  • iterable:表示可迭代对象,像列表、元组、字符串、字典、集合等都属于可迭代对象。

工作原理

  • in 运算符会对 value 是否存在于 iterable 里进行检查。若存在,if 语句的条件为 True,会执行 if 代码块;若不存在,条件为 False,会执行 else 代码块(如果有 else 语句的话)。

不同可迭代对象下的使用示例

1. 列表

numbers = [1, 2, 3, 4, 5]
if 3 in numbers:
    print("3 在列表 numbers 中")
else:
    print("3 不在列表 numbers 中")

在这个例子中,in 运算符会检查数字 3 是否存在于列表 numbers 里。由于 3 是列表的成员,所以会输出 3 在列表 numbers 中

2. 字符串

text = "Hello, World!"
if "World" in text:
    print("'World' 在字符串 text 中")
else:
    print("'World' 不在字符串 text 中")

这里,in 运算符会检查子字符串 "World" 是否存在于字符串 text 中。因为 "World" 是 text 的一部分,所以会输出 'World' 在字符串 text 中

3. 字典

在字典里,in 运算符默认检查的是键,而非值。

person = {"name": "Alice", "age": 25}
if "name" in person:
    print("键 'name' 在字典 person 中")
else:
    print("键 'name' 不在字典 person 中")

此例中,in 运算符检查 "name" 是否为字典 person 的键。由于 "name" 是字典的一个键,所以会输出 键 'name' 在字典 person 中

4. 集合

fruits = {"apple", "banana", "cherry"}
if "banana" in fruits:
    print("'banana' 在集合 fruits 中")
else:
    print("'banana' 不在集合 fruits 中")

在这个例子中,in 运算符检查 "banana" 是否为集合 fruits 的成员。因为 "banana" 存在于集合中,所以会输出 'banana' 在集合 fruits 中

3. 字典

顾名思义,字典是由“键”-“值”对构成的数据集合(也是可迭代对象),通过键来记录对象信息

字典的概念

在 Python 中,字典(dict)是一种无序、可变且可哈希的数据类型,用于存储键值对(key – value pairs)。每个键(key)在字典中是唯一的,它与一个值(value)相关联。字典就像一个映射表,通过键可以快速查找对应的值,类似于现实生活中的字典,通过单词(键)可以找到其释义(值)。

字典的声明

1. 使用花括号 {}

可以使用花括号来创建一个空字典,或者在花括号中直接指定键值对来初始化字典键和值之间用冒号 : 分隔键值对之间用逗号 , 分隔

# 创建一个空字典
empty_dict = {}

# 创建一个包含键值对的字典
student = {
    "name": "Alice",
    "age": 20,
    "major": "Computer Science"
}

2. 使用 dict() 构造函数

dict() 构造函数可以通过多种方式创建字典。

# 通过关键字参数创建字典
person = dict(name="Bob", age=25, city="New York")

# 通过可迭代对象创建字典,可迭代对象中的每个元素必须是包含两个元素的可迭代对象(如元组)
employee = dict([("id", 101), ("department", "HR")])

字典的使用

1. 访问字典中的值

可以通过键来访问字典中对应的值。如果键不存在,会引发 KeyError 异常。为了避免这种情况,可以使用 get() 方法,当键不存在时,get() 方法会返回 None 或指定的默认值。

student = {
    "name": "Alice",
    "age": 20,
    "major": "Computer Science"
}

# 通过键访问值
print(student["name"])  # 输出: Alice

# 使用 get() 方法访问值
print(student.get("age"))  # 输出: 20
print(student.get("grade", "N/A"))  # 键 "grade" 不存在,返回默认值 "N/A"

2. 修改和添加键值对

字典是可变的,可以通过键来修改已有的值,或者添加新的键值对。

student = {
    "name": "Alice",
    "age": 20,
    "major": "Computer Science"
}

# 修改已有的键值对
student["age"] = 21
print(student)  # 输出: {'name': 'Alice', 'age': 21, 'major': 'Computer Science'}

# 添加新的键值对
student["grade"] = "A"
print(student)  # 输出: {'name': 'Alice', 'age': 21, 'major': 'Computer Science', 'grade': 'A'}

3. 删除键值对

可以使用 del 语句或 pop() 方法来删除字典中的键值对。

student = {
    "name": "Alice",
    "age": 20,
    "major": "Computer Science"
}

# 使用 del 语句删除键值对
del student["age"]
print(student)  # 输出: {'name': 'Alice', 'major': 'Computer Science'}

# 使用 pop() 方法删除键值对,并返回被删除的值
major = student.pop("major")
print(major)  # 输出: Computer Science
print(student)  # 输出: {'name': 'Alice'}

4. 遍历字典

可以使用不同的方式遍历字典,如遍历键、遍历值或同时遍历键和值。

student = {
    "name": "Alice",
    "age": 20,
    "major": "Computer Science"
}

# 遍历键
for key in student:
    print(key)

# 等价于
for key in student.keys():
    print(key)

# 遍历值
for value in student.values():
    print(value)

# 同时遍历键和值
for key, value in student.items():
    print(f"{key}: {value}")

5. 检查键是否存在

可以使用 in 运算符来检查一个键是否存在于字典中。

student = {
    "name": "Alice",
    "age": 20,
    "major": "Computer Science"
}

if "name" in student:
    print("键 'name' 存在于字典中")

END

2025/3/19 创建
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
Copyright 2025-2025 @ Ziyang
Running Time days H M S