- 博客(11)
- 资源 (4)
- 收藏
- 关注
原创 【整理】关于各种各样的锁
文章目录各种各样的锁互斥锁读写锁条件变量信号量自旋锁共同点:分为两类:乐观锁、悲观锁行锁、页锁、表锁MyISAMInnoDB各种各样的锁互斥锁互斥锁–保护了一个临界区,在这个临界区中,一次最多只能进入一个线程。如果有多个进程在同一个临界区内活动,就有可能产生竞态条件(race condition)导致错误,其中包含递归锁和非递归锁,(递归锁:同一个线程可以多次获得该锁,别的线程必须等该线程释放所有次数的锁才可以获得)。读写锁读写锁–从广义的逻辑上讲,也可以认为是一种共享版的互斥锁。可以多个线程同时
2021-08-08 16:24:31
506
原创 虚拟机安装系统本地磁盘占用爆表问题
关于虚拟机磁盘占用虚拟机创建在 windows 中,Linux (Ubuntu 20.04) 创建在虚拟机,虽然在 Linux 系统中进行了缓存删除之类的,但是在 Windows 中的虚拟磁盘文件并没有删除相关文件,也就是说 windows 中的虚拟磁盘文件只会增长,不会减少;这样也就出现了一个问题:装虚拟机的磁盘中的可用空间越来越少,知道虚拟机警告⚠内存不足,Linux 系统启动;如何减少或者说压缩磁盘空间?保证虚拟机安装了 VMware Tools;虚拟机所在磁盘剩余空间大于最大的虚拟磁盘分
2021-08-06 23:56:03
1571
原创 递归算法 - 二叉树最大路径和
文章目录二叉树最大路径和题目:解析:代码:二叉树最大路径和题目:路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。输入:root = [1,2,3]输出:6解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6输入:root = [-10,9,2
2021-07-26 11:17:35
730
原创 栈:双栈排序
双栈排序偶然发现的一个题目,应该是面试手撕的算法题,看到了撸它呗!题目给定一个乱序的栈,设计算法将其升序排列。ps: 允许额外使用一个栈来辅助操作输入 [4, 2, 1, 3]输出 [1, 2, 3, 4]分析| | | ||1| | ||2| | ||4| |3|stk tmp (1)此时遇到的问题就是要将 stk 栈顶的元素与 tmp 栈顶的元素进行交换位置;| | | ||3| | ||2|
2021-07-18 00:13:40
233
原创 堆排序—数组中的第K个最大元素
文章目录堆最大堆-堆排序例题如何排序堆化建堆找第K大值堆堆可以看作是一个近似的完全二叉树;完全二叉树??完全二叉树就是对于一颗二叉树,假设深度为d,除第d层外的所有节点都构成满二叉树,且第d层所有节点从左到右连续紧密排列;满二叉树??满二叉树就是叶子节点都在同一层,并且除了叶子节点之外的节点都有两个子节点;堆可分为 最大堆 和 最小堆;最大堆就是根节点是最大元素,除了根节点,其他节点最多和其父节点一样大;左右兄弟之间没有顺序;十大排序算法中的堆排序中,通常使用最大堆进行排序;最小堆通常用
2021-07-16 14:12:25
787
原创 二叉树:前中后序遍历(递归与迭代)
前序遍历题目:给你二叉树的根节点,返回它节点值的前序遍历。解析:对于递归函数,分为三个部分:确定 输入参数 和 返回值 确定 终止条件 确定 单层循环逻辑 对于递归法,前、中、后序遍历只是改变 三类节点的遍历顺序对于迭代法,前、中、后序遍历 不仅仅是只改变某些代码顺序就可以在 前序遍历迭代法 中,要访问和处理的元素顺序是一致的题解:递归法class Solution {public: vector<int> preorderTraversal(
2021-07-16 00:17:39
117
原创 字符串:KMP && 迪杰斯特拉算法
@TOCKMP 字符串算法kmp 算法的优势在于可以避免挨个顺序匹配,什么意思尼?对于暴力解法,就是当两个字符串中的元素开始不相同时,则从子串在主串起始匹配位置的下一个位置开始重新匹配;而 kmp 算法可以在不匹配的元素位置处,根据前缀表的值跳转到相应的位置接着匹配;例如:主串:aabaabaaf,子串:aabaaf,子串的前缀表为 [0,1,0,1,2,0],子串与主串匹配到第六位时不相同,此时看前一位,即第五位对应的前缀表2,所以,子串可以回到下标2位置接着匹配;通常前缀表集体-1;
2021-07-16 00:05:38
238
原创 字符串—KMP算法
一、KMP介绍:KMP算法由Knuth、Morris和Pratt 提出的字符串匹配的算法;MKP算法的核心则是前缀表的构建,关于前缀表如何去计算?很多资料在构建前缀表的描述中很是简略,对于初学者很难搞懂前缀表到底是怎么计算出来的。为什么在KMP字符串匹配算法中要使用前缀表?前缀表的作用就是记录当前元素及之前元素构成的子串中的最长相同前后缀的长度。字符串匹配暴力解法中需要将匹配串(长度为m)与主串(长度为n)进行每一个元素的比较。比如匹配串第一个元素和主串第一个元素比较,如果一样,同时后移一位进行比
2020-12-08 18:35:17
526
原创 C++基础:排序算法 — 选择排序
选择排序:大致思路是找出第i小的数字,并与原数组中第i位置的数字交换位置。循环N-1次,每次循环N-i-1次比较。时间复杂度O(n^2);空间复杂度O(1);图示:C++版本源代码:// selection sort 选择排序#include <iostream>using namespace std;void selectionSort(int num[],int len){ int smallest; for(int i = 0;i <.
2020-11-22 14:06:04
126
原创 C++基础:排序算法 — 插入排序
插入排序与冒泡排序的区别:冒泡排序是每次循环找出第i大的数字,循环N-1次则完成排序;插入排序就是默认第一个数字已排好序,从第二个数字开始与前面排好序的数字进行比较,插入进合适的位置,循环N-1次,完成排序;// Insertion Sort :插入排序// @author by JianJiao 2020年11月21日#include<iostream>using namespace std;void insertSort(int num[],int len){ f.
2020-11-21 15:31:51
135
原创 C++基础:排序算法 — 冒泡排序
**C++基础:排序算法(包括冒泡、插入、选择、希尔、快排、并归、堆排序、桶排序),快排也是面试中常问的基础算法题。虽然C++模板中提供了sort轮子,可以去直接使用,但是理解基础还是很重要的。****冒泡排序:大致思路就是将相邻的两个进行比较,符合条件就进行数据交换。每循环一次,就会将一个最大值(或者最小值)排好位置。N个数据需要进行N-1次循环,每次循环则有N-i-1次交换数据的机会。本文采用的是正序排列数值。**/* Bubble Sort 冒泡排序。*/#include <i
2020-11-20 19:43:18
188
基于无线的温湿度传感系统
2019-04-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人