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

如何妙用哈希表来优化遍历查找过程?刷题感悟总结,c++实现

先上题目
在这里插入图片描述
在这里插入图片描述
题目链接:题目链接

  • 这题我最先想到的就是前缀和a,构造好了以后就遍历每一个[l,r]数组(满足题目要求的连续区间数组),奈何倒数第二个样例时间超限
    在这里插入图片描述
  • 先给出原思路代码
class Solution {
public:int subarraySum(vector<int>& nums, int k) {//vector<int> a;int x = 0;int len = nums.size();a.resize(len + 2, 0);a[1] = nums[0];for (int i = 2; i <= len; i++) {a[i] = nums[i - 1]; // 0号赋值,a[i] += a[i - 1];}// 核心需要优化的地方for (int i = 0; i <= len; i++) {for (int j = i + 1; j <= len; j++) {if (a[j] - a[i] == k)x++;}}return x;}
};
  • 但是介于给出的数组中可能有正数、负数,所以同样的前缀和大小可能有好几个,可以巧妙利用哈希表的find功能(或者count功能,都是查找函数),实现O(n)一次遍历全部数字就好了
  • 代码如下,已ac,主要是把上面那份代码的“核心需要优化的部分”修改
class Solution {
public:int subarraySum(vector<int>& nums, int k) {//vector<int> a;int x = 0;int len = nums.size();a.resize(len + 2, 0);a[1] = nums[0];//从a[1]开始存前缀和for (int i = 2; i <= len; i++) {a[i] = nums[i - 1]; // 0号赋值,a[i] += a[i - 1];}unordered_map<int,int> myMap;// 核心需要优化的地方for (int i = 0; i <= len; i++) {//目的是a[i]-a[l]==k 所以要寻找a[l]if(myMap.count(a[i]-k)) x+=myMap[a[i]-k];myMap[a[i]]++;}return x;}
};
  • 这个思路让我想起之前做过一道题,几乎完全一样的思路,利用哈希表
    在这里插入图片描述
    在这里插入图片描述
    题目链接
    实现代码:
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int,int> myMap;vector<int> x;for(int i=0;i<nums.size();i++){//说明first是具体数值auto  it=myMap.find(target-nums[i]);if(it!=myMap.end()){x ={i,it->second};return x;}myMap[nums[i]]=i;}return  x;}
};
  • 共同点是它们都利用了哈希表(unordered_map)的特性来快速查找和存储信息,以便在遍历数组时可以高效地找到满足条件的元素或子数组。
  • 两道题都是对vector& nums, int k进行查找与操作,大家可以根据这两道题找找思路,以后碰到类似题考虑该方法~

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • shuishuishui
  • ubuntu24.04lts cmake编译 opencv4.5.4 contrib的一些问题
  • .NET+WPF 桌面快速启动工具 GeekDesk
  • Python 设计模式之享元模式
  • RecyclerView的缓存机制(面试常客)
  • C++11 新特性使用讲解【C++】
  • 安卓开发中的AppCompat框架|安卓系统|安卓应用|兼容性|UI组件|核心组件|ActionBar|Fragment|最佳实践|框架|移动开发|移动应用
  • 【STM32】DMA数据转运(存储器到存储器)
  • SSM电子商务系统-计算机毕业设计源码68470
  • 从源码分析 Redis 异步删除各个参数的具体作用
  • 【el-table】横向滚动条加粗后,滚动到固定列下被遮挡,已解决
  • Windows EFI 启动分区修复指南(Windows误删了EFI分区)
  • Facebook与区块链的合作前景:社交平台的未来愿景
  • C# 委托 (delegate)
  • Unity 中创建动画的教程
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 2017-08-04 前端日报
  • angular组件开发
  • Javascript编码规范
  • javascript面向对象之创建对象
  • Ruby 2.x 源代码分析:扩展 概述
  • SpiderData 2019年2月13日 DApp数据排行榜
  • Web设计流程优化:网页效果图设计新思路
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 工作中总结前端开发流程--vue项目
  • 关于使用markdown的方法(引自CSDN教程)
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 解决iview多表头动态更改列元素发生的错误
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 浅谈Golang中select的用法
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 区块链将重新定义世界
  • 深度学习中的信息论知识详解
  • 小程序测试方案初探
  • 函数计算新功能-----支持C#函数
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # C++之functional库用法整理
  • #php的pecl工具#
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (二)学习JVM —— 垃圾回收机制
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (原)本想说脏话,奈何已放下
  • (转)iOS字体
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .net core docker部署教程和细节问题
  • .Net Memory Profiler的使用举例
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .net8.0与halcon编程环境构建
  • .NET成年了,然后呢?
  • .NET导入Excel数据