算法哪些事儿---2

发布时间:2026/9/3 7:36:41

算法哪些事儿---2
耐下心来1.vector和数组在大小指定上的区别2.O(1)时间复杂度可以获取容器内元素大小的容器(size)它们的本质都是在实现容器的时候维护了一个计算元素个数的计数器3.string在算法题中的常用函数①判断字符串是否为空s.empty();②字符串的尾插s.push_back();③字符串的尾删s.pop_back();④字符串的指定位置删除s.erase(str.begin()3);删除s的第四个元素,时间复杂度O(n)⑤字符串在指定位置插入元素s.insert(5,hello); 时间复杂度O(n)⑥字符串的拼接操作shello,等价于 s.append(hello);⑦字符串的截取substr(0,5);从0位置截取5个⑧字符串翻转reverse(s.begin(),s.end()),翻转整个数组4.string::npos是什么是string中的一个静态常量表示“未找到“或“直到字符串末尾”的特殊值一般用于是否找到的判断5.stack在算法中常用的函数①遇到表达式求和这类题我们通常使用的是栈来模拟这类题的解决方法是这个在leetcode字符串解码这道题中我们会使用两个栈来解决这个问题5. 队列算法题常用知识点队列和宽搜题往往是密不可分的因为队列在算法题中的多数情况是服务于宽搜题的宽搜就是BFS广度优先搜索。属于搜索类的算法而搜索类的算法说白了其实也就两种一种是宽搜一种是深搜常见的leetcode算法题中关于宽搜的题包括迷宫最短路径网格图上下左右 4 个方向走二叉树层序遍历一层一层打印树岛屿数量搜索连通块打开转盘锁、腐烂的橘子接下来我们先探讨一下宽搜这种算法在树中的应用首先我们要连接队列的基本函数① 队列在层序遍历中的应用class Solution { public: vectorvectorint levelOrder(Node* root) { vectorvectorint ret; //记录最终结果 queueNode* q; //层序遍历需要的队列 if(root nullptr) return ret; q.push(root); while(q.size()) { vectorint tmp; //存放本层的结点 int sz q.size(); //统计本层的结点个数 for(int i0;isz;i) { Node * t q.front(); q.pop(); tmp.push_back(t-val); for(Node * child :t-children) { if(child ! nullptr) { q.push(child); } } } ret.push_back(tmp); } return ret; } };有的队列的容器可以查找队头和队尾但是有的队列容器你只能查找对头查不到队尾这个题其实就是一个解决队列和树的关系的模板方法遇到这种题可以考虑用这个模板6.优先级队列堆算法堆的常用接口有如何在算法中创建大堆小堆面试常常会考手写堆所以我们需要自己会手撕堆的实现#include vector using namespace std; class MaxHeap { public: vectorint heap; //上浮 void up(int i) { while(i 0) { int fa (i - 1) / 2; if(heap[i] heap[fa]) { swap(heap[i], heap[fa]); i fa; } else { break; } } } //下沉 void down(int i) { int n heap.size(); while(true) { int left i * 2 1; int right i * 2 2; int maxIdx i; if(left n heap[left] heap[maxIdx]) maxIdx left; if(right n heap[right] heap[maxIdx]) maxIdx right; if(maxIdx i) break; swap(heap[i], heap[maxIdx]); i maxIdx; } } void push(int x) { heap.push_back(x); up(heap.size() - 1); } void pop() { swap(heap[0], heap.back()); heap.pop_back(); down(0); } int top() { return heap[0]; } bool empty() { return heap.empty(); } };在面试过程中我们遇到面试官问我们Topk问题面试官一般想要我们的解决方法有①堆②快排也就是快速选择算法这两个方法是时间复杂度都比价低关于用堆的方法解决第K大或者第K小的问题找第K大我们就建一个之后K个容量的小根堆从头到尾遍历这组数字遇到数字大于当前heap的top的值的时候我们删除heap的top然后把这个 数字插入heap这样做的目的是让heap中始终保存的是当前见到的K个最大的数字当走到数组结尾的时候在heap这个小根堆中保存的刚好是从最大数字到第K大的数值并且因为我们建的是小根堆所以堆顶元素的值就是我们要找的第K大同理当我们要找第K小这个问题我们建的是大根堆比如我们要找第3小我们每次要做的是让当前指针遍历到的值和堆顶元素的值比较如果比堆顶值小就删除堆顶的将这个元素push进堆中这样当遍历完之后我们就找到了整个数组中的3个最小值因为我们创建的是大根堆第3小肯定是最小的元素中的最大的呢个所以我们返回top即为第K小下面是我用heap实现的一道topK问题class Solution { public: int findKthLargest(vectorint nums, int k) { priority_queueint,vectorint,greaterint heap; for(auto x:nums) { heap.push(x); //堆在push之后会自动调整排序的 if(heap.size() k) { heap.pop(); //因为创建的是小根堆所以现在pop的一定是最小的元素 } } return heap.top(); } };值得注意的是我们创建的堆的比较方式是可以自己定义的下面这道算法题我们就是通过自己定义比较方式来进行比较的class Solution { typedef pairstring,int PSI; struct cmp { bool operator()(const PSIa,const PSIb) { if(a.second b.second) //频次相同字典序按照大根堆的方式排序 { return a.first b.first; } return a.second b.second; } }; public: vectorstring topKFrequent(vectorstring words, int k) { //1.统计单词出现的频次 unordered_mapstring,int hash; for(auto w:words) hash[w]; //2.创建堆 priority_queuePSI,vectorPSI,cmp heap; //3.topK的主逻辑 for(auto psi:hash) { heap.push(psi); if(heap.size()k) heap.pop(); } //4.提取结果,创建一个vector,默认大小是k,然后让堆顶元素依次倒着放进vector中 vectorstring ret(k); for(int ik-1;i0;i--) { ret[i] heap.top().first; heap.pop(); } return ret; } };7.关于算法题中的精度问题意思就是在我们做算法题的时候如果想要返回值是符合题目要求的精度的时候可以想办法利用这种精度提成的方式

相关新闻

空调电源设计:Buck与LDO协同方案解决高可靠、高效率与低噪声挑战

空调电源设计:Buck与LDO协同方案解决高可靠、高效率与低噪声挑战

2026/9/3 7:26:41

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

大数据深度学习|计算机毕设项目|计算机毕设答辩|中风人群的数据分析与可视化

大数据深度学习|计算机毕设项目|计算机毕设答辩|中风人群的数据分析与可视化

2026/9/3 7:26:41

标题:中风人群的数据分析与可视化文档介绍:1.引言1.1 课题背景与意义中风作为全球范围内致残率与死亡率最高的疾病之一,其防治工作已成为公共卫生领域的重点课题。根据世界卫生组织统计数据显示,我国每年新发中风病例超过300万&am…

晋阳湖日落微醺歌单:Amapiano完整编排指南

晋阳湖日落微醺歌单:Amapiano完整编排指南

2026/9/3 7:26:41

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

AI眼镜接入智能手表运动健康数据:Livis OTA升级全解析

AI眼镜接入智能手表运动健康数据:Livis OTA升级全解析

2026/9/3 8:36:44

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

SN与IMEI重写工具原理与实战:从Fastboot/EDL模式到NV分区操作

SN与IMEI重写工具原理与实战:从Fastboot/EDL模式到NV分区操作

2026/9/3 8:36:44

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

3000张香蕉标注数据集:YOLO与VOC双格式农业视觉落地实践

3000张香蕉标注数据集:YOLO与VOC双格式农业视觉落地实践

2026/9/3 8:36:44

简介:本资源是面向深度学习初学者与计算机视觉开发者的专业级香蕉目标检测数据集,专为训练YOLO、Faster R-CNN等物体检测模型设计,解决农业质检、智能零售及自动分拣场景中香蕉识别与定位的实际问题。压缩包共2000个文件,包含5965…

基于STM32与ACS758的高精度数字电流表设计与实现

基于STM32与ACS758的高精度数字电流表设计与实现

2026/9/3 8:36:44

简介:这是一套面向嵌入式初学者与硬件工程师的电流测量系统完整开发资料,基于STM32F103C8T6主控与ACS758霍尔效应电流传感器,实现高精度直流电流采集与4位8段数码管实时显示,适用于电源监控、电池管理系统及教学实验等场景。资源包…

瑞芯微多屏控制专利解析:智能座舱多屏协作技术实践

瑞芯微多屏控制专利解析:智能座舱多屏协作技术实践

2026/9/3 8:36:44

如果你正在开发智能座舱系统,一定遇到过这样的困境:中控屏、仪表盘、副驾娱乐屏各自为政,重要车讯信息无法在不同屏幕间智能流转。驾驶员查看导航时错过关键报警,副驾看电影时干扰主驾视线,这种碎片化的显示体验不仅影…

软件依赖树算法精解:从图论到华为OD机考实战

软件依赖树算法精解:从图论到华为OD机考实战

2026/9/3 8:26:44

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/9/2 10:08:07

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/9/2 12:11:52

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/9/1 23:49:08

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

【原创】基于微信小程序+AI大模型+uni-app的宠物用品商城小程序(设计与实现)

【原创】基于微信小程序+AI大模型+uni-app的宠物用品商城小程序(设计与实现)

2026/9/3 0:06:18

摘要:随着电子商务与本地生活服务的普及,线上交易与店铺运营管理已成为常规业态。传统分散式进销存与人工对账方式存在流程割裂、库存难同步、促销规则难落地、经营数据难沉淀等弊端,难以支撑一体化的数字化运营。同类课题亦多见多商户在线商…

【原创】基于AI大模型+SpringBoot+Vue的宠物用品商城(设计与实现)

【原创】基于AI大模型+SpringBoot+Vue的宠物用品商城(设计与实现)

2026/9/3 0:06:18

摘要:随着电子商务与本地生活服务的普及,线上交易与店铺运营管理已成为常规业态。传统分散式进销存与人工对账方式存在流程割裂、库存难同步、促销规则难落地、经营数据难沉淀等弊端,难以支撑一体化的数字化运营。同类课题亦多见多商户在线商…

【原创】基于微信小程序+AI大模型+uni-app的节日礼品定制商城小程序(设计与实现)

【原创】基于微信小程序+AI大模型+uni-app的节日礼品定制商城小程序(设计与实现)

2026/9/3 0:06:18

摘要:随着电子商务与本地生活服务的普及,线上交易与店铺运营管理已成为常规业态。传统分散式进销存与人工对账方式存在流程割裂、库存难同步、促销规则难落地、经营数据难沉淀等弊端,难以支撑一体化的数字化运营。同类课题亦多见多商户在线商…

远程协作的工作台整理

远程协作的工作台整理

2026/9/3 6:56:24

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/3 6:39:45

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/3 5:20:28

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…