可做笔记的阅读网站质感设计网站
2026/1/1 11:04:51 网站建设 项目流程
可做笔记的阅读网站,质感设计网站,网店怎么推广和宣传,建设外包网站核心思路回顾通过哈希表存储「已遍历元素值 → 下标」的映射#xff0c;遍历数组时计算当前元素的 “补数”#xff08;目标值 - 当前值#xff09;#xff0c;若补数存在于哈希表中#xff0c;则直接返回结果#xff1b;若不存在#xff0c;将当前元素存入哈希表#…核心思路回顾通过哈希表存储「已遍历元素值 → 下标」的映射遍历数组时计算当前元素的 “补数”目标值 - 当前值若补数存在于哈希表中则直接返回结果若不存在将当前元素存入哈希表继续遍历。详细解题步骤假设输入为vectorint nums和int target最终返回vectorint类型的下标数组具体步骤如下步骤 1引入必要头文件 命名空间C 中需要引入vector存储数组和unordered_map哈希表的头文件并用using namespace std;简化代码也可显式写std::cpp运行#include vector // 用于存储数组和返回结果 #include unordered_map // 哈希表容器 using namespace std;步骤 2定义函数 初始化哈希表函数返回值为vectorint参数为数组引用nums和目标值target创建空的unordered_map键为元素值int值为元素下标intcpp运行vectorint twoSum(vectorint nums, int target) { // 初始化哈希表键元素值值元素下标 unordered_mapint, int hashMap;步骤 3遍历数组逐个检查补数使用for循环遍历数组i为当前元素下标nums[i]为当前元素值计算补数complement target - nums[i]需要找到的另一个数检查补数是否在哈希表中若存在返回哈希表中补数对应的下标 当前下标i若不存在将当前元素值和下标存入哈希表继续遍历。代码实现cpp运行// 遍历数组i为下标nums[i]为当前元素 for (int i 0; i nums.size(); i) { int complement target - nums[i]; // 计算补数 // 检查补数是否在哈希表中find返回迭代器end()表示未找到 if (hashMap.find(complement) ! hashMap.end()) { // 找到则返回结果补数下标 当前下标 return {hashMap[complement], i}; } // 未找到则将当前元素和下标存入哈希表 hashMap[nums[i]] i; }步骤 4兜底返回语法要求题目保证输入必有唯一答案因此此处仅为满足函数语法要求返回空数组cpp运行// 题目保证有解此处仅兜底 return {}; }步骤 5测试函数可选编写main函数测试示例用例验证结果正确性cpp运行#include iostream // 用于输出结果 int main() { // 示例1nums [2,7,11,15], target 9 vectorint nums1 {2, 7, 11, 15}; int target1 9; vectorint res1 twoSum(nums1, target1); cout 示例1结果[ res1[0] , res1[1] ] endl; // 示例2nums [3,2,4], target 6 vectorint nums2 {3, 2, 4}; int target2 6; vectorint res2 twoSum(nums2, target2); cout 示例2结果[ res2[0] , res2[1] ] endl; // 示例3nums [3,3], target 6 vectorint nums3 {3, 3}; int target3 6; vectorint res3 twoSum(nums3, target3); cout 示例3结果[ res3[0] , res3[1] ] endl; return 0; }关键步骤解析以示例 2 为例nums [3,2,4], target 6遍历次数下标 i当前值 nums [i]补数 complement哈希表状态存入前检查结果哈希表状态存入后1036-33空未找到补数{3:0}2126-24{3:0}未找到补数{3:0, 2:1}3246-42{3:0, 2:1}找到补数 2下标 1无需存入最终返回[1, 2]符合示例 2 结果。暴力解法的解题步骤对比参考若用暴力法步骤如下时间复杂度 O (n²)外层循环遍历每个元素下标i从 0 到nums.size()-1内层循环遍历i之后的元素下标j从i1到nums.size()-1检查nums[i] nums[j] target若满足则返回{i, j}题目保证有解无需处理无结果情况。暴力法代码cpp运行vectorint twoSum(vectorint nums, int target) { int n nums.size(); for (int i 0; i n; i) { for (int j i 1; j n; j) { if (nums[i] nums[j] target) { return {i, j}; } } } return {}; }核心注意点哈希表选择unordered_map是哈希表查找 / 插入平均 O (1)若用map红黑树时间复杂度会升至 O (logn)效率更低避免重复元素先检查补数再存入当前元素确保不会使用同一个元素如示例 3 的 [3,3]返回值C 中直接返回vectorint满足 “返回数组下标” 的要求。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询