技能标识:algorithm-solver
系统性地解析和解决算法题。覆盖题目理解、暴力解到优化解的推导、算法模板讲解、测试用例设计、生产级代码实践。适用于 LeetCode、面试题、竞赛题等场景。当用户提出算法题、数据结构问题、或要求解题时自动触发。
输入:
输出:
核心问题:
暴力思路:遍历所有可能的元素对,检查它们的和是否等于目标值。
时间复杂度:O(n²)
空间复杂度:O(1)
暴力解的问题:对于每个元素,都需要遍历剩余元素来查找互补值,导致大量重复查找操作。
优化目标:将查找互补值的时间从 O(n) 降低到 O(1)。
优化依据:可以用哈希表存储已遍历元素的值到索引的映射,实现常数时间查找。
选用:哈希表(字典)
原因:
整体框架:遍历数组一次,对于每个元素,检查其互补值(target - 当前值)是否已在哈希表中。如果存在,则找到答案;如果不存在,将当前元素及其索引存入哈希表。
关键变量:
核心循环:
终止条件:找到互补对时返回两个索引,题目保证有解。
python
def two_sum(nums: list[int], target: int) -> list[int]:
在数组中找到两个数之和等于目标值,返回它们的下标。
Args:
nums: 整数数组
target: 目标值
Returns:
包含两个下标的列表 [index1, index2]
# 不变量:complementtoindex 存储已遍历元素的值到索引的映射
complementtoindex = {}
for i, num in enumerate(nums):
complement = target - num
# 检查互补值是否已在哈希表中
if complement in complementtoindex:
return [complementtoindex[complement], i]
# 将当前元素加入哈希表
complementtoindex[num] = i
# 题目保证有解,理论上不会执行到这里
return []
| 类型 | 输入 | 预期输出 | 说明 |
|---|---|---|---|
| 正常用例 | nums=[2,7,11,15], target=9 | [0,1] | 标准情况 |
| 最小规模 |
python
for nums, target, expected in test_cases:
result = two_sum(nums, target)
assert result == expected, fFailed: nums={nums}, target={target}, expected={expected}, got={result}
print(f✅ nums={nums}, target={target} → {result})
输出:
✅ nums=[2, 7, 11, 15], target=9 → [0, 1]
✅ nums=[3, 3], target=6 → [0, 1]
✅ nums=[3, 2, 4], target=6 → [1, 2]
✅ nums=[1, 2, 3], target=5 → [1, 2]
✅ nums=[-1, -2, -3], target=-5 → [1, 2]
python
def twosumdefensive(nums: list[int], target: int) -> list[int]:
# 非法输入检查
if not nums:
raise ValueError(Input array is empty)
if len(nums) < 2:
raise ValueError(Input array must have at least 2 elements)
complementtoindex = {}
for i, num in enumerate(nums):
complement = target - num
if complement in complementtoindex:
return [complementtoindex[complement], i]
complementtoindex[num] = i
# 如果无解,返回空列表或抛出异常
return []
python
import logging
logger = logging.getLogger(name)
def twosumwith_logging(nums: list[int], target: int) -> list[int]:
# 入口:记录输入的关键特征
logger.info(two_sum() called: len(nums)=%d, target=%d, len(nums), target)
if not nums:
logger.warning(Empty input received, returning empty list)
return []
complementtoindex = {}
for i, num in enumerate(nums):
complement = target - num
# 关键决策点:检查互补值
if complement in complementtoindex:
logger.debug(Found pair: nums[%d]=%d + nums[%d]=%d = %d,
complementtoindex[complement], complement, i, num, target)
return [complementtoindex[complement], i]
complementtoindex[num] = i
# 出口:记录结果
logger.info(two_sum() done: no solution found)
return []
Redis 数据库:哈希表是 Redis 的核心数据结构之一,用于实现键值对存储、缓存、会话管理等
数据库索引:哈希索引用于等值查询的快速定位
网络路由表:路由器使用哈希表快速查找下一跳地址
来源:基于知识推断
以下为平台配置的接入选项,并非逐项实测通过。能否安装取决于客户端支持、技能来源和运行环境:
帮我安装 SkillHub 和 algorithm-solver-1776419937 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 algorithm-solver-1776419937 技能
skillhub install algorithm-solver-1776419937
文件大小: 5.76 KB | 发布时间: 2026-4-17 20:03