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

LeetCode - 1. 两数之和

题目

1. 两数之和 - 力扣(LeetCode)

思路

这是一道经典的算法题,我的思路是用哈希表来解决,可以将时间复杂度优化到O(n)。

首先,我会遍历数组,对于每个元素,计算它与目标值的差值。然后检查这个差值是否已经在哈希表中。如果在,就找到了答案;如果不在,就把当前元素及其索引存入哈希表。

具体实现时,我会用一个无序哈希表,键是数组元素值,值是索引。

读者可能出现的问题

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int,int> hash; for(int i =0;i<nums.size();i++){hash[nums[i]]++;}for(int i = 0;i<nums.size();i++){if(hash.count(target - hash[nums[i]])){return {i,target - hash[nums[i]]};}}return {0,0};}
};

unordered_map<int, int> hash;: 你用unordered_map存储的是每个数字的出现次数,而在做target - hash[nums[i]]时,你实际上在查找的是某个数字的数量,这并不是你想要的。你应该存储的是数字和它们的索引,而不是次数。
if (hash.count(target - hash[nums[i]])): 这里,你在比较target - hash[nums[i]],但你希望的是判断target - nums[i]是否存在于hash中。因此,条件判断的表达式是错误的。
你希望返回的是两个数的索引,而不是数字的值,因此返回的结果应该是索引,而不是目标数值。

正确的写法

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int,int> hash; for(int i =0;i<nums.size();i++){int x = target - nums[i];if(hash.count(x)){return {i,hash[x]};}hash[nums[i]] = i;}return {-1,-1};}
};
http://www.xdnf.cn/news/1393381.html

相关文章:

  • 华硕主板 BIOS 提示——GPT header corruption has been detected
  • 【树论】树上启发式合并
  • RV1126的OSD模块讲解
  • 单节锂电池,升压至12V/2.5A的芯片选型指南(附FP5207X 与 FP7208参数表)
  • Zabbix-获取客户端的SNMP数据
  • CMake⼯程指南-2
  • Linux系统——EXT2 文件系统
  • 记录:HSD部署(未完成)
  • 基于 Vue + Interact.js 实现可拖拽缩放柜子设计器
  • CosyVoice win10启用记
  • 《Shell 大道:筑基篇(下)—— 流控筑根基,数据任驱驰》
  • 【K8s】整体认识K8s之与集群外部访问--service
  • 【Doris入门】Doris表模型完全指南:明细、聚合、主键模型的选择与优化技巧
  • layout版图设计学习笔记4_Virtuoso基础介绍
  • Altium Designer 22使用笔记(10)---PCB铺铜相关操作
  • 如何解决网关断网后时间不再统计的问题?无RTC子设备如何打通主网关的时间同步功能?
  • Unity EventTrigger 动态添加事件
  • 电商数据的获取方式:API、爬虫、第三方服务及更多
  • 如何使用 Graylog 连接 Easysearch
  • Nginx原理及九大常见故障解决方法
  • idea2025.1.5安装+pj
  • MemoryVLA:让机器人拥有“记忆“的视觉-语言-动作模型
  • 3021. Alice 和 Bob 玩鲜花游戏
  • JSTL!
  • 期权合约作废了怎么处理?
  • STM32之IIC详解
  • IP v 6
  • five86: 2靶场渗透
  • 论文阅读:ICLR 2024 GAIA: A Benchmark for General AI Assistants
  • 嵌入式Linux LED驱动开发