news 2026/10/15 20:35:34

两数之和 暴力解法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
两数之和 暴力解法

在 LeetCode 的入门题目中,“两数之和”(Two Sum)绝对是绕不开的经典。这道题看似简单,却能帮我们夯实数组遍历、条件判断等基础编程能力。今天就来聊聊这道题的暴力解法思路,以及完整的 C++ 实现。

题目回顾

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

注意:

  • 每种输入只会对应一个答案。
  • 你可以假设每种输入只会对应一个答案,且同一个元素不能使用两遍。
  • 你可以按任意顺序返回答案。

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

暴力解法思路

暴力解法的核心逻辑非常直观:遍历所有可能的数对,检查它们的和是否等于目标值。

具体步骤:

  1. 外层循环遍历数组中的每一个元素,下标记为i(从 0 开始,遍历到倒数第二个元素即可,因为内层会找后续元素);
  2. 内层循环遍历i之后的所有元素,下标记为j(从i+1开始,避免重复检查同一对数,也避免使用同一个元素两次);
  3. 对于每一对(nums[i], nums[j]),判断它们的和是否等于target;
  4. 一旦找到符合条件的数对,立即返回它们的下标[i, j];
  5. 题目保证有且仅有一个答案,因此循环结束前必定能找到结果。

C++ 代码实现

cpp

运行

#include <vector> using namespace std; class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { int i, j; // 外层循环:遍历到倒数第二个元素即可 for (i = 0; i < nums.size() - 1; i++) { // 内层循环:从i的下一个元素开始,避免重复 for (j = i + 1; j < nums.size(); j++) { // 找到和为target的数对,直接返回下标 if (nums[i] + nums[j] == target) { return {i, j}; } } } // 题目保证有解,此处仅为语法兼容 return {i, j}; } };

代码解析

  1. 变量定义:声明两个整型变量i和j,分别作为外层和内层循环的下标;
  2. 外层循环:i从 0 遍历到nums.size() - 2(因为nums.size() - 1是最后一个元素的下标,i到倒数第二个即可,j会取最后一个);
  3. 内层循环:j从i+1开始遍历到数组末尾,确保每个数对只检查一次;
  4. 条件判断:若nums[i] + nums[j] == target,直接返回包含下标i和j的 vector;
  5. 兜底返回:题目明确有且仅有一个解,因此这行代码不会被执行,仅为满足函数的返回语法要求。

复杂度分析

  • 时间复杂度:O (n²)。外层循环执行 n 次,内层循环平均执行 n/2 次,总的时间复杂度为平方级。
  • 空间复杂度:O (1)。仅使用了常数个临时变量,没有额外开辟与输入规模相关的空间。

总结

暴力解法是两数之和最基础的解法,优点是思路简单、代码易实现,适合算法入门者理解 “遍历 + 匹配” 的核心思想;缺点是时间效率较低,当数组规模较大(如 n>10⁴)时,运行时间会显著增加。

后续还可以优化为哈希表解法(时间复杂度 O (n)),感兴趣的同学可以继续深入研究。刷题的核心不是记住答案,而是理解每一种解法的思路和适用场景,逐步培养算法思维。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 16:32:43

【光子 AI 】应用 LangGraph 的核心模型和算法原理,完整实现一个极简版的 Agent 开发框架源代码,并给出具体的应用测试实际项目案例

应用 LangGraph 的核心模型和算法原理,完整实现一个极简版的 Agent 开发框架源代码,并给出具体的应用测试实际项目案例 文章目录 应用 LangGraph 的核心模型和算法原理,完整实现一个极简版的 Agent 开发框架源代码,并给出具体的应用测试实际项目案例 1) 核心模型与算法原理…

作者头像 李华
网站建设 2026/10/15 11:21:29

31、Linux网络服务与协议配置详解

Linux网络服务与协议配置详解 在当今的网络环境中,Linux系统凭借其强大的网络功能和高度的可定制性,在企业和数据中心中得到了广泛应用。本文将深入探讨Linux系统中NFS(网络文件系统)服务以及IPX和NCP文件系统的相关配置和使用。 NFS挂载选项详解 NFS是一种在网络中实现…

作者头像 李华
网站建设 2026/10/15 3:45:51

34、UUCP 配置与使用全解析

UUCP 配置与使用全解析 1. UUCP 连接与传输流程 UUCP(Unix-to-Unix Copy Program)在进行文件传输时,首先会进行握手阶段。在这个阶段,两个站点会维护成功连接的计数,并进行比较。若计数不匹配,握手就会失败,这一机制能有效防范冒名顶替者。 之后,两个 uucico 进程会…

作者头像 李华
网站建设 2026/10/15 20:31:31

45、C News系统配置与管理指南

C News系统配置与管理指南 在当今的信息时代,新闻组系统是信息传播和交流的重要平台之一。C News作为一款经典的新闻组服务器软件,其配置和管理对于确保新闻组的正常运行和信息的有效传播至关重要。本文将详细介绍C News系统的配置和管理要点,包括初始设置、关键文件的配置…

作者头像 李华
网站建设 2026/10/14 13:27:41

现代Python包管理工具效能对比:uv与pip深度评测

Python包管理在AI项目开发中扮演着至关重要的角色。随着ComfyUI-Manager这类大型AI项目的复杂度不断提升&#xff0c;传统的pip包管理方式已难以满足高效开发的需求。本文基于ComfyUI-Manager v3.38.3版本&#xff0c;深入剖析新一代包管理器uv与传统pip在实际项目中的性能表现…

作者头像 李华
网站建设 2026/10/15 17:53:28

Bark语音生成模型:从零到精通的完整实战指南

Bark语音生成模型&#xff1a;从零到精通的完整实战指南 【免费下载链接】bark 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/bark 在AI技术飞速发展的今天&#xff0c;文本到语音转换技术已经成为众多应用场景的核心需求。无论是为视障人士提供辅助工具&a…

作者头像 李华