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

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

时光荏苒,博主也是再次来到leetcode的起点了,今天的我早已不是过去的我,回归正题接下来开始我们的算法之旅吧

int* twoSum(int* nums, int numsSize, int target, int* returnSize) {int* arr =(int*)malloc(sizeof(int)*2);* returnSize=0;for(int i = 0;i<numsSize-1;i++){for(int j = i+1;j<numsSize;j++){if(nums[i]+nums[j]==target){arr[0]=i;arr[1]=j;* returnSize=2;return arr;}}}return arr;
}

ps.这是博主在今年1月17日,提交的代码,那时博主还很小白

一、题目解析

1、同一个元素不能使用两次

2、返回答案的顺序任意

二、算法原理

解法1:暴力解法(向后枚举)

解法2:暴力解法(由前向后枚举)

解法3:在解法2的基础上使用哈希表优化

1、为什么要用哈希表优化?

我们需要频繁的查找某一个元素,用哈希表可以达到O(1)的查找

2、该如何使用哈希表?

根据题目的需求,我们的哈希表中要存储<nums[i],i>,这里的i是对应的下标;在遍历元素时,先固定一个值nums[i],然后在哈希表中找target-nums[i],如果存在,则返回{hash[target-nums[i],i},如果不存在,则把nums[i]和i插入到哈希表中

为什么不在解法1的基础上用哈希表优化?

1、在一般情况下是可以的,我们把所有元素放到哈希表中,然后查找

2、但如果存在nums[i] = 4,target = 8时,在哈希表中查找,会违反题目条件,即相同元素使用两次,需要进行条件的特判,所以不在解法1的基础上优化

三、代码示例

解法1:暴力解法(向后枚举)

//解法1:暴力枚举(向后枚举)vector<int> twoSum(vector<int>& nums, int target){for(int i = 0;i<nums.size();i++){for(int j = i+1;j<nums.size();j++)if(nums[i]+nums[j] == target)return {i,j};}return {0,0};}

这里的{i,j}构造一个vector的匿名对象

解法2:暴力解法(由前向后枚举)

//解法2:暴力解法(由前向后枚举)vector<int> twoSum(vector<int>& nums, int target){for(int i = 0;i<nums.size();i++){for(int j = 0;j<i;j++)if(i != j && nums[i]+nums[j] == target)return {i,j};}return {0,0};}

解法3:在解法2的基础上使用哈希表优化

 //解法3:哈希表优化vector<int> twoSum(vector<int>& nums, int target){unordered_map<int,int>hash;for(int i = 0;i<nums.size();i++){if(hash.count(target-nums[i]))return {hash[target-nums[i]],i};hash[nums[i]] = i;}return {0,0};}

看到最后,如果对您有所帮助,还请点赞、收藏和关注,一键三联支持一下,我们下期再见!

http://www.xdnf.cn/news/1420003.html

相关文章:

  • 电路学习(四)半导体
  • LeetCode 165. 比较版本号 - 优雅Java解决方案
  • LangChain开源LLM集成:从本地部署到自定义生成的低成本落地方案
  • 人工智能——课程考核
  • 移动开发如何给不同手机屏幕做适配
  • Shell脚本编程:函数、数组与正则表达式详解
  • [SWPUCTF 2018]SimplePHP
  • 如何用AI视频增强清晰度软件解决画质模糊问题
  • 【音视频】WebRTC QoS 概述
  • 子串:滑动窗口最大值
  • Flutter 完全组件化的项目结构设计实践
  • 王丹妮《营救飞虎》首映礼获赞 三家姐展现坚毅与温柔并存
  • FunASR开源部署中文实时语音听写服务(CPU)
  • uniapp 优博讯k329蓝牙打印机,设置打印机,一键打印
  • 通义灵码+支付 MCP:30 分钟实现创作打赏智能体
  • Agent落地元年:谁在成为最坚实的土壤?
  • 私有化存储架构演进:从传统NAS到一体化数据平台
  • 分布式光伏模式怎么选?从 “凭经验” 到 “靠数据”,iSolarBP 帮你锁定最优解
  • 恶意软件概念学习
  • 从零到一,在GitHub上构建你的专属知识大脑:一个模块化RAG系统的开源实现
  • Windows系统下如何配置和使用jfrog.exe
  • 【设计模式】--重点知识点总结
  • CatBoost(Categorical Boosting,类别提升)总结梳理
  • 基于SpringBoot的运动服装销售系统【2026最新】
  • python爬虫之requests库的使用(小白五分钟从入门到精通)
  • 【笔记】算法设计:异或空间线性基
  • 树形结构后端构建
  • 【前端】跨域
  • Python云原生与Serverless架构:2025年的开发新范式
  • java讲解自己对业务架构、数据架构、应用架构的理解