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

04.两数之和

在这里插入图片描述

✅ 方法一:暴力枚举(时间复杂度 O(n²))

// 暴力法:枚举数组中每一对元素,判断是否满足两数之和为 target
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> ans;int size = nums.size();// 外层循环:固定第一个数 nums[i]for (int i = 0; i < size; ++i){// 内层循环:从 i+1 开始,避免重复和自身相加for (int j = i + 1; j < size; ++j){// 如果找到了两个数之和为 targetif (nums[i] + nums[j] == target){ans.push_back(i);  // 添加第一个数的下标ans.push_back(j);  // 添加第二个数的下标return ans;        // 直接返回结果}}}return ans; // 未找到时返回空数组}
};

✅ 方法二:哈希表优化(时间复杂度 O(n))

// 哈希表法:边遍历边查找,利用空间换时间,将查找从 O(n) 降到 O(1)
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> dic; // 键为数值,值为下标for (int i = 0; i < nums.size(); ++i) {int complement = target - nums[i]; // 需要寻找的补数// 如果补数已在哈希表中,直接返回两个下标if (dic.count(complement)) {return {dic[complement], i};}// 否则将当前数及其下标加入哈希表dic[nums[i]] = i;}return {}; // 未找到时返回空数组}
};

📌 总结对比:

方法时间复杂度空间复杂度优点缺点
暴力法O(n²)O(1)简单直接效率低,适合小数据
哈希表法O(n)O(n)高效占用额外空间

相关文章:

  • 数据库同步是什么意思?数据库架构有哪些?
  • 《AI角色扮演反诈技术解析:原理、架构与核心挑战》
  • Linux基础开发工具——yum工具
  • QML技术优势
  • day21 常见的降维算法
  • 英国2025年战略防御评估报告:网络与电磁域成现代战争核心
  • 【学习笔记】Python金融基础
  • Linux 云服务器部署 Flask 项目(含后台运行与 systemd 开机自启)
  • 智能推荐系统:协同过滤与深度学习结合
  • # Vue + OpenLayers 完整项目开发指南
  • 【unity游戏开发入门到精通——通用篇】从零掌握UnityWebRequest:文件下载、表单提交、超时处理、断点续传
  • Devops自动化运维---py基础篇一
  • Android Studio 打包时遇到了签名报错问题:Invalid keystore format
  • leetcode1443. 收集树上所有苹果的最少时间-medium
  • pyqt5 安装失败
  • C++课设:通讯录管理系统(vector、map协作实现)
  • ESP32S3 LVGL超大字体
  • Java中为什么要实现多线程
  • HarmonyOS-ArkUI核心API: UIContext
  • 发票识别查验难题
  • seo整站优化哪家好/想建立自己的网站怎么建立
  • 网站建设费计入哪个科目/驾校推广网络营销方案
  • 网站建设备案优化/百度浏览器官网下载并安装
  • 网站建设公司前十名/如何进行网络推广营销
  • 安全员c证电子证书查询/湖南seo推广多少钱
  • 做模式网站/重庆seo海洋qq