数据结构与算法
文章平均质量分 66
数据额结构与算法
小明的笔记仓库
转载笔记来自互联网资料整理。
仅供个人学习用途。
展开
-
《数据结构与算法之美》目录
开篇词 (1讲)开篇词 | 从今天起,跨过“数据结构与算法”这道坎入门篇 (4讲)01 | 为什么要学习数据结构和算法?02 | 如何抓住重点,系统高效地学习数据结构与算法?03 | 复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?04 | 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度基础篇 (38讲)05 | 数组:为什么很多编程语言中数组都从0开始编号?06 | 链表(上):如何实现LRU缓存淘汰算法?07 | 链表(下):如何轻松写出正确转载 2022-04-22 22:09:27 · 278 阅读 · 0 评论 -
vector、string用法、数组____
s.erase(pos,1);从第pos个位置删除1个字符 s.insert(pos,"%20");原创 2021-11-18 21:11:53 · 160 阅读 · 0 评论 -
背包九讲——全篇详细理解与代码实现
背包九讲——全篇详细理解与代码实现_良月澪二的博客-CSDN博客_背包九讲转载 2022-06-27 17:51:20 · 111 阅读 · 0 评论 -
15 | Kafka如何实现高性能IO?
Apache Kafka 是一个高性能的消息队列,在众多消息队列产品中,Kafka 的性能绝对是处于第一梯队的。我曾经在一台配置比较好的服务器上,对 Kafka 做过极限的性能压测,Kafka 单个节点的极限处理能力接近每秒钟 2000 万条消息,吞吐量达到每秒钟 600MB。你可能会问,Kafka 是如何做到这么高的性能的?我们在专栏“进阶篇”的前几节课,讲的知识点一直围绕着同一个主题:怎么开发一个高性能的网络应用程序。其中提到了像全异步化的线程模型、高性能的异步网络传输、自定义的私有传输协议和序原创 2022-04-30 21:12:26 · 869 阅读 · 0 评论 -
数据结构优质资料
优质资料原创 2022-04-30 20:47:57 · 448 阅读 · 0 评论 -
必知必会30题
关于数组和链表的几个必知必会的代码实现数组 实现一个支持动态扩容的数组 实现一个大小固定的有序数组,支持动态增删改操作 实现两个有序数组合并为一个有序数组 链表 实现单链表、循环链表、双向链表,支持增删操作 实现单链表反转 实现两个有序的链表合并为一个有序链表 实现求链表的中间结点 对应的 LeetCode 练习题(@Smallfly 整理)数组Three Sum(求三数之和)英文版:Loading...中文版:力扣转载 2022-04-30 20:37:32 · 134 阅读 · 0 评论 -
09 | 队列:队列在线程池等有限资源池中的应用★★★
我们知道,CPU 资源是有限的,任务的处理速度与线程个数并不是线性正相关。相反,过多的线程反而会导致 CPU 频繁切换,处理性能下降。所以,线程池的大小一般都是综合考虑要处理任务的特点和硬件环境,来事先设置的。当我们向固定大小的线程池中请求一个线程时,如果线程池中没有空闲资源了,这个时候线程池如何处理这个请求?是拒绝请求还是排队请求?各种处理策略又是怎么实现的呢?实际上,这些问题并不复杂,其底层的数据结构就是我们今天要学的内容,队列(queue)。如何理解“队列”?队列这个概念非常好理解。你原创 2022-04-30 20:13:06 · 302 阅读 · 0 评论 -
二叉树__
二叉树知识框架二叉树遍历框架刷算法题建议从「树」分类开始刷,结合框架思维,把这⼏⼗道题刷完,对于树结构的理解应该就到位了。这时候去看回溯、动规、分治等算法专题,对思路的理解可能会更加深刻⼀些。二叉搜索树/二叉排序树/二叉查找树平衡二叉树【技巧总结】1. 通过为经典SB树增加一个属性all(用于记录当前节点为根节点的树中具有的节点总数),可以实现计算在当前节点具有多少个重复值。在改进SB树中寻找...原创 2022-04-25 19:50:07 · 804 阅读 · 0 评论 -
递归、回溯、DFS、BFS
递归递归三要素:目的,停止条件,传递条件。做递归思考三步: 递归的函数要干什么? 函数作用是判断传入的两个树是否镜像。 输入:TreeNode left, TreeNode right 输出:是:true,不是:false 递归停止的条件是什么? 左节点和右节点都为空 -> 倒底了都长得一样 ->true 左节点为空的时候右节点不为空,或反之 -> 长得不一样-> false 左右节点值不相等 ->..原创 2021-12-05 22:04:29 · 613 阅读 · 0 评论 -
链表___
难点:链表相关问题的难度在于不用额外空间的方法和coding的能力 注意头结点、尾结点、下一个节点、下下个节点是否为空节点解题辅助dummy节点 哈希表 数组 双指针 回文链表其他节点的拷贝先完成另外一个节点的拷贝(相当于删除了本节点),再删除被拷贝的结点,变相的完成节点删除操作。存在的问题:问题1,如果被拷贝结节不仅仅是个数字,而是个服务器,那么所有连接它的访问将会全部失效,这就会造成重大问题或。问题2,被拷贝节点无法访问其构造方法或者初始化方法或是其他内容,原创 2021-12-04 17:39:10 · 64 阅读 · 0 评论 -
排序____
O(n^2)=======================================冒泡排序【稳定】冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。1.1 算法描述比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对...原创 2021-12-02 17:00:18 · 241 阅读 · 0 评论 -
堆______
大根堆和小根堆的应用利用大根堆解决有序结构中取前N个数的问题。堆排序的时间复杂度单次添加某个元素时,堆排序的时间复杂度为log N,其中N为数组长度。系统堆和手工实现的堆如果题目中使用堆的方式是挨个添加/删除,不需要对已添加的元素进行修改,那可以使用系统给提供的堆。但是一旦需要对已添加的元素进行修改,那必须是手动实现堆,然后进行适当修改,这样才能保证时间复杂度达到最优。...原创 2021-12-02 16:23:49 · 74 阅读 · 0 评论 -
队列_____
%maxsize是什么意思?出现在循环队列的出列和入列表达式里?如果最后一个元素位置被使用后,要再存下一个元素,那么按循zhuan环队列的定义,应该是存到数组的开头,而对MaxSize取余则可以使得下标从MaxSize-1变为0,然后递增,达到循环的目的...原创 2021-12-02 16:19:33 · 301 阅读 · 0 评论 -
栈_____
c++ stl栈stack的成员函数介绍操作 比较和分配堆栈empty() 堆栈为空则返回真pop() 移除栈顶元素push() 在栈顶增加元素size() 返回栈中元素数目top() 返回栈顶元素单调栈原创 2021-12-02 16:18:29 · 73 阅读 · 0 评论 -
位运算__
位运算基础&按位与如果两个相应的二进制位都为1,则该位的结果值为1,否则为0|按位或两个相应的二进制位中只要有一个为1,该位的结果值为1^按位异或若参加运算的两个二进制位值相同则为0,否则为1~取反~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1<<左移用来将一个数的各二进制位全部左移N位,右补0>>右移将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数, 高位补0技巧1.消去最后一个 1.原创 2021-11-17 19:24:00 · 326 阅读 · 0 评论 -
二分查找_★★★
二分查找到底有能运用在哪里?最常见的就是教科书上的例子,在有序数组中搜索给定的某个目标值的索引。再推广一点,如果目标值存在重复,修改版的二分查找可以返回目标值的左侧边界索引或者右侧边界索引。PS:以上提到的三种二分查找算法形式在前文「二分查找详解」有代码详解,如果没看过强烈建议看看。抛开有序数组这个枯燥的数据结构,二分查找如何运用到实际的算法问题中呢?当搜索空间有序的时候,就可以通过二分搜索「剪枝」,大幅提升效率。说起来玄乎得很,本文先用一个具体的「Koko 吃香蕉」的问题来举个例子。..原创 2021-11-17 19:08:28 · 557 阅读 · 0 评论 -
双指针 & 滑动窗口
快慢指针解决主要解决链表中的问题,比如典型的判定链表中是否包含环快慢指针一般都初始化指向链表的头结点head,前进时快指针fast在前,慢指针slow在后,巧妙解决一些链表中的问题。1、判定链表中是否含有环用两个指针,一个跑得快,一个跑得慢。如果不含有环,跑得快的那个指针最终会遇到null,说明链表不含环;如果含有环,快指针最终会超慢指针一圈,和慢指针相遇,说明链表含有环。2、已知链表中含有环,返回这个环的起始位置当快慢指针相遇时,让其中任一个指针指向头节点,然后让它俩以相同速度前进原创 2021-11-14 20:41:49 · 2606 阅读 · 1 评论 -
动态规划入门
C++ 之父 Bjarne Stroustrup 先生回答过一个问题:“如今新生代技术人员倾向于学习 Java、Go 或 Python 这些更容易上手的编程语言,您是如何看待这个现象的?” Stroustrup 先生的回答大概是这样的:“如果一个人只了解一种编程语言,那么他不能称自己是专业人士,而从我的角度上看,将 C++ 作为基础,能让你深入洞察各种各样编程语言背后的思想和设计思路。”建立扎实的基础知识体系先掌握基础数据结构和算法,再来谈动态规划。锻炼算法编码能力,重视实践...原创 2021-11-14 17:26:04 · 1028 阅读 · 0 评论 -
vecotr 数组去重
一、手动去重两种思路:一是:将不重复的元素存入另一个数组,再输出。二是:将重复的元素值置为0 或 -1 或 其他标记值,然后输出时,只输出标记值以外的值。思路二:#include <iostream>#include <vector>#include <algorithm>using namespace std;int main() { int i = 0, j =0; vector<int> nums = { 0,2,2原创 2021-10-10 12:29:03 · 545 阅读 · 0 评论