- 博客(44)
- 资源 (2)
- 收藏
- 关注
原创 跳跃表解析
写在前面跳表的应用很多 redis zset的底层数据结构的一种就是其应用面试被问到两次 一次不知道 一次没太讲清除 尴尬所以专门找了redis书里的跳表学以下主要基于Redis5设计与源码分析 这本书直接看书也可以 这篇博客是对书内容的一个解析算是我的笔记 是我对于书内容的理解 希望能帮到你里面有些图太丑 不要嫌弃 有些图可能因为github 加载会慢点关于java实现跳表可以看视频:https://www.bilibili.com/video/BV1Er4y1P7k1?from=sear
2021-04-24 16:24:09
673
原创 IO多路复用底层原理及源码解析
基本概念1. 关于linux文件描述符在Linux中,一切都是文件,除了文本文件、源文件、二进制文件等,一个硬件设备也可以被映射为一个虚拟的文件,称为设备文件。例如,stdin 称为标准输入文件,它对应的硬件设备一般是键盘,stdout 称为标准输出文件,它对应的硬件设备一般是显示器。对于所有的文件,都可以使用 read() 函数读取数据,使用 write() 函数写入数据。“一切都是文件”的思想极大地简化了程序员的理解和操作,使得对硬件设备的处理就像普通文件一样。所有在Linux中创建的文件都有一
2021-04-21 23:30:04
779
原创 JVM与JUC
之前面试总结的JUC和JVM相关脑图 备份JVMhttp://naotu.baidu.com/file/d495a092ea3157fc25abfca0899a470c?token=571a7ed63b53b82fJUChttp://naotu.baidu.com/file/708dfe0cfdce941b518c68c14ba0a628?token=07dd92eeb8c2e16f覆盖大多数面试点
2020-11-18 12:24:29
799
原创 记录
很简单的一个闹钟小项目样式:功能:按键介绍:选择星期 输入24小时制时间 选择铃声 点击确定即锁定选择 输入 订闹钟(星期默认星期一 铃声默认情景剧 安利下孟美岐版情景剧)点击重置可以重置选择与输入铃声响起时点击关闭闹钟可关闭铃声点击上传音乐 弹出上传界面 选择文件(暂只限mp3格式)进行上传各个功能实现原理:1.动态时间显示 用线程控制 每隔1秒获取一次当前时间2.星期与日...
2020-03-13 11:32:27
506
原创 java自学
学Java有一段时间了 算半自学 老九的课确实不错不过近期还发现了一个不错的java学习网站有教程 有项目 界面也挺简单明白站长也会进行答疑 总体还不错网站链接:https://how2j.cn/p/4724...
2020-03-01 19:52:10
117
原创 119 力扣杨辉三角 Ⅱ
1.模拟 动态规划118的状态转移公式 dp[i][j] = dp[i-1][j-1] + dp[i-1][j]可以看到可将[i-1],[i]省掉 只返回指定行// dp[i][j] = dp[i-1][j-1] + dp[i-1][j]vector<int> getRow(int rowIndex) { vector<int> a; ...
2019-12-19 11:23:48
136
原创 力扣 121 买卖股票的最佳时间
用了一种暴力算法 过于暴力 超时了class Solution {public: int maxProfit(vector<int>& prices) { //找最大 最小值 最小值下标在最大值下标之前 即将第一位最大拿出讨论即可 vector<int>::iterator it; ...
2019-12-12 11:25:43
165
原创 力扣 27 移除元素
与26相似 基本相同 只是由于26是数组之间元素比较 27是数组元素与传入参数比较 因此两指针起始位置不同 整体思路相同从不等方面思考(记录保留)i慢指针j快指针不等时两指针指向同一位置 两指针都移动相等时 快指针移动 慢指针不动 待到再相等时快指针位置元素覆盖慢指针位置元素,将相等项删除即可代码class Solution {public: int removeEleme...
2019-11-26 19:43:16
185
原创 力扣 26 删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums ...
2019-11-25 18:02:12
147
原创 力扣 876 链表中间结点
一开始延续回文链表向量数组的写法 只返回了结点值 且忘记向量可以为结点类型 导致出错本题其实很简单 想的有点复杂了1.向量数组class Solution {public: ListNode* middleNode(ListNode* head) { vector<ListNode*> a= {head}; while(a.back()...
2019-11-24 19:55:03
173
原创 力扣 237 删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 – head = [4,5,1,9],它可以表示为:示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: ...
2019-11-24 18:07:26
150
原创 力扣 234 回文链表
快慢指针找中点(注意奇偶)分开反转后半链比较(以后半链为主)class Solution {public: bool isPalindrome(ListNode* head) { ListNode *p=new ListNode(-1);//预先指针 ListNode *fast=p; ListNode *low=p; ...
2019-11-24 17:03:25
224
原创 力扣 206反转链表
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL1.利用外部条件 容器2.双指针 迭代class Solution {public: ListNode* reverseList(ListNode* head) { ListNode *p...
2019-11-24 16:27:04
146
原创 力扣 203 移除链表元素
一开始想太简单了没有考虑到已经遍历到的结点无法删除有三种方法:1.在原表基础上删除 要定义指向当前结点前一结点的指针/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next...
2019-11-23 17:56:02
189
原创 力扣 2 两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> ...
2019-11-23 17:06:05
194
原创 删除字符串中所有指定字符
多种方法: vector<char>vec; vector<char>::iterator ite; vector<char>::iterator p; vec.push_back('A'); vec.push_back('A'); vec.push_back('A'); vec.push_back('B')...
2019-11-23 17:05:06
378
原创 力扣 160相交链表
一开始想到的暴力解法忽略了两链表不等长时,都从第一个元素开始遍历会失败解法1.暴力解法指针遍历链表,但是要记得若两链表不等长则不能只遍历一遍,则需要两个while形成两层遍历,则一链表为基,从起始遍历另一链表,相互比较。即对链表A中的每一个结点ai ,遍历整个链表 B 并检查链表 B 中是否存在结点和ai相同。class Solution {public: ListNode *g...
2019-11-20 15:49:45
149
原创 进程 程序从编译到运行 cpu对内存的操作
今天对几个概念进行了统一,进程,程序从编译到运行,指令执行大概流程 更多细节:https://blog.csdn.net/freeking101/article/details/78257914首先明确几个概念:进程:程序动态执行的过程多层次存储器结构:https://blog.csdn.net/iva_brother/article/details/80463578指令:http:/...
2019-11-18 20:29:12
1141
原创 力扣 114环形链表
第一种超出时间限制且不知是否符合题意/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {publi...
2019-11-13 20:47:00
150
原创 力扣 083 删除排序链表中的 重复元素
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3/** * Definition for singly-linked list. * struct ListNode { * int val;...
2019-11-13 17:28:58
101
原创 五子棋项目 --C语言
前段时间用C语言和小组成员一起写了一个五子棋的小项目我写的代码基本被毙了 惨 但也学到很多总结一下五子棋项目简要介绍:1.用光标控制棋子运动及下棋2.控制台输出 没用gui3.有悔棋功能4.只有人人对战 无ai 人机对战(之后可能会升级 并加入联机操作)5.其他和一般五子棋一样6.采用简单的栈进行棋子数据的存储,实现下棋,悔棋功能...
2019-11-10 18:11:47
1731
2
原创 力扣226 翻转二叉树
即左右进行交换再递归/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */struct TreeNode* invertTree(struct Tre...
2019-11-05 19:49:33
229
原创 力扣 104二叉树的最大深度+111 二叉树的最小深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3 。int maxDepth(struct TreeNode* root){ if(root==N...
2019-10-25 20:38:08
133
原创 二叉树遍历相关习题及代码
二叉树遍历:前序遍历:根左右中序遍历:左根右后序遍历:左右根4.层次遍历:逐层遍历 ABCDEFGHIJK代码:#include <stdio.h>#include <stdlib.h>typedef struct BiNode{ char data; struct BiNode *left,*right;//指向自身 递...
2019-10-23 16:05:15
967
原创 二叉树性质及习题
二叉树性质:1.在二叉树的第 k层至多有 2^(k -1)个结点。(k>=1)2.深度为 k 的二叉树至多有 2^(k-1)个结点(k >=1)。3. 对任何一棵二叉树T, 如果其叶结点数为n0, 度为2的结点数为 n2,则n0=n2+1。证明:若度为1的结点有 n1个,总结点个数为n,总边数为 e,则根据二叉树的定义, n = n0 + n1 + n2 ...
2019-10-23 13:52:35
1177
原创 力扣101 对称二叉树 + 力扣 100 相同的树
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。1/ 2 2/ \ / 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:1/ 2 2\ 3 3用递归基本思想:抛开根结点,从左右子树出发,递归两种思考方式:1.从false方面出发,在左右子树均存在...
2019-10-22 20:56:10
105
原创 力扣 779 第K个语法符号
在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。给定行数 N 和序数 K,返回第 N 行中第 K个字符。(K从1开始)例子:输入: N = 1, K = 1输出: 0输入: N = 2, K = 1输出: 0输入: N = 2, K = 2输出: 1输入: N = 4, K = 5输出: 1解释:第一行: 0第二行: 01第三行: 01...
2019-10-13 19:48:06
210
原创 力扣 1137 第 N 个泰波那契数
泰波那契序列 Tn 定义如下:T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2给你整数 n,请返回第 n 个泰波那契数 Tn 的值。示例 1:输入:n = 4输出:4解释:T_3 = 0 + 1 + 1 = 2T_4 = 1 + 1 + 2 = 4示例 2:输入:n = 25输出:1389537...
2019-10-09 21:20:07
165
原创 八皇后问题 递归解决
问题描述:该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。一共92种摆法。这是一种摆法:递归基本思路:先在第一行放一个棋子,第二步,在第二行找一个安全的地方再放一个棋子,以此类推,放到第八个棋子时结束。总体思想:1.首先创建棋盘并初始化2.写八皇后函数,此为...
2019-10-09 20:17:47
185
原创 力扣 155 最小栈
部分思想及代码转载自:https://blog.csdn.net/alps1992/article/details/41741811一开始忘了考虑最小栈会被退栈以及还会有进栈的数问题代码报废每次更新 时间复杂度O(n),过高效率高的方法,时间复杂度O(1).我们每次入栈的时候,保存的不再是真正的数字,而是它与当前最小值的差(当前元素没有入栈的时候的最小值)。 这样我们pop和top的时候拿...
2019-09-25 16:06:05
214
原创 内存布局与分配
部分转载自https://blog.csdn.net/qq_29924041/article/details/54897204和小甲鱼数据结构课程内存布局规律:malloc 申请动态内存空间void *malloc(size_t size);malloc函数向系统申请分配size个字节的内存空间,并返回一个指向这空间的指针void *,表示未确定类型的指针。C,C++规定,...
2019-09-21 21:02:15
156
原创 力扣 984 不包含aaa或bbb的字符串 python
给定两个整数 A 和 B,返回任意字符串 S,要求满足:S 的长度为 A + B,且正好包含 A 个 ‘a’ 字母与 B 个 ‘b’ 字母;子串 ‘aaa’ 没有出现在 S 中;子串 ‘bbb’ 没有出现在 S 中。示例 1:输入:A = 1, B = 2输出:“abb”解释:“abb”, “bab” 和 “bba” 都是正确答案。示例 2:输入:A = 4, B = 1输出:...
2019-09-21 21:01:03
452
原创 数据结构 链队列与循环队列 C
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式**~~插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎...
2019-09-20 19:54:00
232
原创 栈运用 中缀表达式转化为后缀表达式 C语言
1 小甲鱼数据结构视频所示有些地方有点累赘大致思路:1.数字直接打印,符号依次入栈,优先级高的先出栈,左括号没有优先级2.左右括号匹配与其两者相夹的符号可一起出栈,(若括号内多个符号就不可直接一起出栈)或直接打印,3.有新符号入栈时,若符号是右括号或优先级小于等于栈顶元素,则栈顶元素依次出栈并输出,直到遇到左括号或栈空,(从栈中弹出元素直到遇到发现更低优先级的元素(或者栈为空)为止),...
2019-09-08 17:03:38
297
原创 栈运用 逆波兰表达式 C语言
逆波兰表达式即后缀表达式输入逆波兰表达式输出结果大致思路:输入字符,注意字符与字符之间间隔,故创建缓存数组将字符转化为浮点数后压入栈,因逆波兰表达式会将优先级表现出来,则将浮点数遇见符号进行计算即可,计算结果再压入栈等待与后面的浮点数再遇见输入的符号#include <stdio.h>#include <stdlib.h>#include <ctype....
2019-09-08 17:00:25
1034
2
原创 栈运用 二进制转八/十进制 C语言
每个二进制数转换成相应的十进制数方法如下:(XnXn-1……X3X2X1)2 = X120+X2*21+…+Xn2^(n-1)#include <stdio.h>#include <stdlib.h>#include <math.h>#define STACK_INIT_SIZE 20#define STACKINCREMENT 10type...
2019-09-08 16:47:24
311
原创 数据结构 栈
小甲鱼数据结构课程笔记栈 先进后出 仅限在表尾进行插入或删除操作的线性表,表头为栈递(base),表尾为栈顶(top),top指向栈顶的下一个元素即栈的插入和删除操作栈的插入操作(Push),叫做进栈,也称为压栈,入栈。类似子弹放入弹夹的动作。栈的删除操作(Pop),叫做出栈,也称为弹栈。如同弹夹中的子弹出夹。有顺序存储结构和链式存储...
2019-09-08 16:34:25
123
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人