自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

提小莫的寂寥的博客

小提莫的学习笔记

  • 博客(24)
  • 收藏
  • 关注

原创 快速选择 TopK问题 nth_element方法

在解决第K大的问题时,相较于常规的使用排序或优先级队列,使用快排中的快速选择算法,可将复杂度降至O(n)。而STL中有个类似的方法nth_element,作用是找到序列中的第K小/大元素(从0开始计数),并将其移动到序列第K小/大的位置处,且与快速选择类似的,在其运算完成后,所有位于该第K小元素之前的数都比该元素小/大,所有位于该第K小元素后的数都比该元素大/小,但被分割的前后两个子序列内部的顺序不能保证。nth_element函数调用方法为:nth_element(arr.begin(), arr.

2022-05-20 01:13:08 187

原创 insert,emplace,try_emplace

map,unordered_map的emplace、try_emplace方法,set,unordered_set的insert方法,其返回值为:pair<iterator, bool>:若插入成功(即原容器中没有相应元素(对于set一族)或相应key(对于map一族)),则iterator为指向插入元素的迭代器,bool为true,标志成功插入若插入失败(容器中已有元素或key),则iterator指向已存在元素的迭代器,bool为false,标志插入失败unorder_map和ma

2022-05-19 00:43:00 984

原创 一丢丢笔记

奇数^1 = 该数-1偶数^1 = 该数+1「连续段 偶奇 两两成对」的组合,适合使用「异或」来找相应的成组对象力扣第540题给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。请你找出并返回只出现一次的那个数。你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。二分+异或...

2022-05-08 03:09:26 100

原创 优先级队列自定义比较函数的坑

一般来说,通过<运算符来做比较(包括自定义的<运算符),结果应该是升序。但在优先级队列里面,用<运算符来做比较,结果是降序,用>运算符来做比较,反而是升序,和平常的情况是反的struct ListNode{ int val; ListNode* next; ListNode(int a,ListNode* b=nullptr):val(a),next(b){}};int main(){ ListNode* A=new ListNode(1);

2021-09-24 17:25:49 236

原创 每日一题遇坑小结(持续跟新)

每日一题遇坑小结(持续跟新)1、accumulate函数numeric头文件中的accumulate函数原型为:template<class _InIt, class _Ty, class _Fn2> inline _Ty _Accumulate(_InIt _First, _InIt _Last, _Ty _Val, _Fn2 _Func) { // return sum of _Val and all in [_First, _Last), using _Func for (

2021-09-10 15:23:06 81

原创 Linux内核学习笔记——进程调度(三)

6、抢占和上下文切换上下文切换:从一个可执行进程切换到另一个可执行进程。相关函数会进行如下两步操作:将虚拟内存从上一个进程映射切换到新进程中从上一个进程的处理器状态切换到新进程的处理器状态内核提供了一个need_resched标志来表明是否需要重新执行一次调度,而不仅是靠用户程序代码显式地调用schedule()。每个进程都包含一个need_resched标志,这是因为访问进程描述符内的数值要比访问全局变量快。6.1 用户抢占用户抢占在以下情况时发生:从内核系统调用返回用户空间时从中断

2020-06-05 17:06:27 242

原创 Linux内核学习笔记——进程调度(二)

4、Linux调度算法4.1 调度器类Linux调度器是以模块的方式提供的,这样做的目的是允许不同类型的进程可以有针对性地选择调度算法。这种模块化结构被称为调度器类,它允许多种不同的可动态添加的调度算法并存,调度属于自己范畴的进程。每个调度器都有一个优先级,按照优先级顺序遍历调度类,拥有一个可执行进程的最高优先级的调度器类胜出,去选择下面要执行的那一个程序。完全公平调度(CFS) 是一个针对普通进程的调度类。CFS采用的方法是对时间片分配方式进行根本性的重新设计:完全摒弃时间片而是分配给进程一个处理器

2020-06-05 16:24:33 168

原创 Linux内核学习笔记——进程调度(一)

1、多任务多任务操作系统就是能同时并发地交互执行多个进程的操作系统。多任务操作系统都能使多个进程处于阻塞或者睡眠状态,即实际上不被投入执行,直到工作就绪。多任务系统可以划分为两类:非抢占式多任务和抢占式多任务:抢占:由调度程序来决定什么时候停止一个进程的运行,以便其他进程能够得到执行机会。这个强制的挂起动作叫做抢占。进程在被抢占之前能够运行的时间是预先设置好的,叫进程的时间片非抢占:除非进程自己主动停止运行,否则它会一直执行。进程主动挂起自己的操作称为让步2、Linux的进程调度O(1)调度

2020-06-03 19:30:19 147

原创 Linux学习笔记——进程管理(二)

3、进程创建

2020-06-02 22:04:14 299

原创 Linux内核学习笔记——进程管理(一)

1、进程进程是出于执行器的程序以及相关的资源的总称,包括打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存地址空间及一个或多个执行线程等。2、进程描述符及任务结构内核把进程的列表存放在叫做任务队列的双向循环链表中,链表中每一项都是类型为task_struct、称为进程描述符的结构。进程描述符中包含的数据能完整地描述一个正在执行的程序:它打开的文件、进程的地址空间、挂起的信号、进程的状态等等。2.1 分配进程描述符Linux通过slab分配器动态生成task_struct

2020-05-26 19:08:13 205

原创 leetcode笔记,求众数,摩尔投票

在做leetcode上的每日打卡题目时,看到了几道一系列的关于众数的问题,都可以用摩尔投票的方法来解答,做个小笔记Leetcode第169题 多数元素题目给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。解析:运用减而治之的思想,摩尔投票方法这里题目假设了数组非空,且一定...

2020-03-13 22:58:00 153

原创 刷leetcode笔记,异或,位运算

今天在看到LeetCode上的第389题时,看到题解里提到的简洁明了的异或解法,看完觉得好巧妙。进而去搜了搜异或的常用性质以及可以处理的各种变种题型,真的感叹异或运算太精巧了。异或的常用性质:交换律:A ^ B ^C = A ^ C ^ B结合律:A ^ B ^C = A ^ (B ^C)一个数异或0等于它本身:A ^ 0 = A一个数与自身异或等于0:A ^ A = 0自反性:一个数被异或两次将会被抵消:A ^ B ^B = A这其中最重要的就是自反性利用这些性质可以巧妙地解决很多算法题。

2020-03-11 18:34:38 338

原创 快速排序——学习笔记

早已听过快排的大名,今天去学了快排的两种实现方式,简单记一下笔记主算法快排和归并排序均为分而治之,快排也是将原序列划分为两个规模更小的子序列,然后递归地进行排序,但与归并排序不同的是,快排在划分子序列的时候要求:前一序列中的任何元素都不得超过后一序列中的各个元素。因此,在对前一子序列和后一子序列进行排序之后,只需简单将二者串接起来,原序列自然有序。平凡解(递归基):只剩单个元素时,本身就是有...

2020-03-10 02:00:22 325

原创 数据结构与算法——图(三) 学习笔记

三、广度优先搜索3.1 策略始自顶点s的广度优先搜索(Breadth-First Search, BFS)访问起始顶点s依次访问s所有尚未访问的邻接顶点依次访问这些新节点尚未访问的邻接顶点反复执行1~3步,直到所有顶点接受访问图截取自清华大学数据结构慕课注意:这里相当于按照与起点s的距离,将所有顶点划分为若干个等价类(图中类似一环一环的环路)。同一等价类内部各顶点的边都...

2020-03-08 21:21:54 791

原创 数据结构与算法——图(二) 学习笔记

二、ADT&邻接矩阵2.1 Graph模板类书上给出了Graph模板类的具体定义,太长了这里不贴了。主要记一下图的操作接口。图的操作接口分为边和顶点两类:图支持的边操作接口:操作接口功能描述e()边总数exist(v, u)判断联边(v, u)是否存在insert(v, u)引入从顶点v到u的联边remove(v, u)删除从顶点v到u...

2020-03-06 00:20:22 521

原创 数据结构与算法——图(一) 学习笔记

图一、概述1.1 图图(graph),可定义为G = (V, E)。其中,**集合V(顶点集)**中的元素称作顶点(vertex);**集合E(边集)**中的元素分别对应于V中的某一对顶点(u, v),表示它们之间存在某种关系,故亦称作边(edge)。规定V和E均是有限集,将规模记作:n= |V|,e=|E|。邻接关系:顶点与顶点间的关系关联关系:顶点与和其相连的边的关系1.2 无向...

2020-03-05 01:32:57 679

原创 数据结构与算法——二叉树(四) 学习笔记

二、遍历2.4 迭代后序遍历解决办法:找到第一个被访问的节点将沿途各节点的祖先及右兄弟(若存在)用栈保存从根出发下行,尽可能沿左分支,实不得已,才沿右分支。最后一个节点必是叶子,也是递归版中visit()首次执行处。这叶子将首先接受访问第一个被访问的节点从左侧水平向右看去,未被遮挡的最高叶节点v——称作最高左侧可见叶节点(HLVFL)——即为后序遍历首先访问的节点。请注意,该节点...

2020-03-04 00:10:19 308

原创 数据结构与算法——二叉树(三) 学习笔记

二、遍历求解问题的策略:不要从轮子造起,要善于利用以前的成果。将二叉树这种半线性结构转化为此前研究有素的线性结构——遍历遍历:按照事先约定的某种次序,对树中的每个节点都恰好访问一次任何一个局部的子树,可分为树根V、左子树L和右子树R三部分。只要根节点的访问和左右子树的遍历次序能够明确确定,那么在整体上就必然导致一个明确的线性次序。按惯例左兄弟L优先于右兄弟R,根据对根节点V在三者中的不同的...

2020-03-03 22:29:52 201

原创 数据结构与算法——二叉树(二) 学习笔记

一、树1.4 二叉树的实现BinNode模板类节点基本组成元素:数据域:data引用域:parent,lChild,rChild指标:height,color,npl等(npl:空节点通路长度(null path length))下图摘自清华大学《数据结构(C++语言版)》代码摘自清华大学《数据结构(C++语言版)》template <typename T&...

2020-03-02 00:29:43 368

原创 数据结构与算法——二叉树(一) 学习笔记

一、 树树(Tree),用来按照层次关系,组织一系列数据项的数据结构。兼顾了向量和列表的静态、动态操作优点,属于半线性结构1.1 树有根树指定任意节点r作为根后,T即称作有根树(rooted tree)。相对于T,TiT_iTi​ 称作以rir_iri​ 为根的子树,记作Ti=subtree(ri)T_i=subtree(r_i)Ti​=subtree(ri​)任一节点r在通往树根沿途所...

2020-03-02 00:29:11 514

原创 数据结构与算法——栈与队列(三) 学习笔记

二、队列队列(queue)仍为一种线性序列。与栈类似,队列也是受限的序列,其中一端只能够出,另一端只能够进。(联想排队时的情况)只能在队尾插入(查询):enqueue(), rear()只能在队首删除(查询):dequeue(), front()图片摘自清华大学《数据结构(C++语言版)》与栈结构恰好相反,队列中各对象的操作次序遵循先入先出(FIFO) 的规律。在社会资源或是各种计...

2020-02-29 23:00:48 188 2

原创 数据结构与算法——栈与队列(二) 学习笔记

接上一条博客的目录继续1.3 栈应用1.3.4 延迟缓冲:中缀表达式求值在线性扫描算法中,往往对数据的读取速度和处理速度不同步,而往往是各步的计算速度滞后于扫描的速度,需待到必要的信息已完整到一定程度之后,才能作出判断并实施计算。算法思路减而治之:在表达式中寻找能够优先计算的子串,并将其的值重新放在原位置进行后续计算。对于非常长的表达式,如果通过线性扫描的次序来处理表达式,很难确认当...

2020-02-29 21:41:42 211

原创 数据结构与算法——栈与队列(一) 学习笔记

最近正在学清华大学的那门DSA,从现在开始就把学习笔记,以及过程中感悟、遇到的问题、解决方法都记录在博客里。就从今天学习的开始记录吧,之前用word记录的学习笔记后面有时间再慢慢往博客上面搬一、栈ADT接口栈,stack,线性序列,但只能访问栈中的特定元素(栈的一端),其中开放的一端称为栈顶(top),不开放的另一端称为栈底(bottom)。三个基本操作入栈——将元素作为最顶部的元素插入...

2020-02-29 16:39:09 371

原创 第一篇博客

以往学习东西都是用word记笔记,最近在B站看了程序羊Codesheep的视频,觉得用博客来记录自己的学习笔记,以及学习过程中遇到的各种问题、解决办法、感悟等,是个不错的方法。准备慢慢培养起写博客的习惯,系统化地整理学习的知识和问题,以及感悟等,当做对已学习的知识的巩固,方便日后对知识的梳理和回忆,以及对学习历程的记录。...

2020-02-28 20:50:57 64

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除