自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 08内存管理

1、页和区(1)页页是虚拟内存的最小单位。内核把物理页作为内存管理的基本单位。处理器的最小可寻址单位通常为字(甚至字节)。但是内存管理单元(将虚拟地址转换为物理地址的硬件)通常以页为单位进行处理。从虚拟内存角度来看,页就是最小单位。内核使用struct page结构(物理页结构)表示系统中的每个物理页:struct page{ /* 存放页的状态(是否为脏页)等 */ unsigned long flags; /* 页被引用的次数统计,为-1时表示内核中没有引用这一页

2020-12-30 23:35:34 309

原创 331验证二叉树的前序序列化(二叉树性质)

1、题目描述序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如#。 9 / \ 3 2 / \ / \ 4 1 # 6/ \ / \ / \# # # # # #例如,上面的二叉树可以被序列化为字符串 "9,3,4,#,#,1,#,#,2,#,6,#,#",其中 # 代表...

2020-12-30 15:14:38 433

原创 09虚拟文件系统

1、虚拟文件系统概述虚拟文件系统作用:虚拟文件系统是Linux文件系统中的一个抽象软件层;因为它的支持,众多不同的实际文件系统才能在Linux中共存,跨文件系统操作才能实现。通过虚拟文件系统,程序可以利用标准的Unix系统调用对不同的文件系统,甚至不同介质上的文件进行读写操作。VFS使得用户可以直接使用open()、read()、write()这一的系统调用而无须考虑具体文件系统和实际物理介质。Unix/Linux中的“一切皆是文件”的口号才能够得以实现。文件系统抽象层:内核在它的底层文件系统接口上

2020-12-28 22:06:17 1090

原创 329矩阵中的最长递增路径(递归DFS深度优先搜索+备忘录)

1、题目描述给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。2、示例输入: nums =[ [9,9,4], [6,6,8], [2,1,1]]输出: 4解释: 最长递增路径为[1, 2, 6, 9]。3、题解基本思想:DFS深度优先搜索+备忘录,遍历二维数组matrix每一个元素,以该元素出发能得到的最大递增序列长度len,如果比res大则更新res。...

2020-12-28 17:17:53 115

原创 328奇偶链表(单链表基本操作)

1、题目描述给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。说明:应当保持奇数节点和偶数节点的相对顺序。 链表的第一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。2、示例输入: 1->2->3->4->5->NULL输出: 1->3-&

2020-12-28 11:47:00 304

原创 10进程地址空间

1、

2020-12-26 22:26:01 709

原创 3263的幂(数学)

1、题目描述给定一个整数,写一个函数来判断它是否是 3的幂次方。如果是,返回 true ;否则,返回 false 。整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x提示:-2^31<= n <= 2^31- 12、示例输入:n = 27输出:true3、题解基本思想:数学,n不断除以3,如果不能取余3返回false,直到n==1返回true,时间复杂度O(logn)。#include<iostream>#include&...

2020-12-26 14:10:50 94

原创 324摆动排序 II(nth_element+荷兰旗问题——困难)

1、题目描述给定一个无序的数组nums,将它重新排列成nums[0] < nums[1] > nums[2] < nums[3]...的顺序。说明: 你可以假设所有输入都会得到有效的结果。进阶: 你能用O(n) 时间复杂度和 / 或原地 O(1) 额外空间来实现吗?2、示例输入: nums = [1, 5, 1, 1, 6, 4]输出: 一个可能的答案是 [1, 4, 1, 5, 1, 6]3、题解基本思想:快速选择算法+荷兰旗算法,时间复杂度O(n)...

2020-12-25 21:55:15 92

原创 322零钱兑换(动态规划——完全背包)

1、题目描述给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。你可以认为每种硬币的数量是无限的。提示:1 <= coins.length <= 12 1 <= coins[i] <= 231- 1 0 <= amount <= 1042、示例输入:coins = [1, 2, 5], amount = 11输出:3解释:11 ...

2020-12-24 15:48:22 105

原创 321拼接最大数(单调栈+归并——困难)

1、题目描述给定长度分别为m和n的两个数组,其元素由0-9构成,表示两个自然数各位上的数字。现在从这两个数组中选出 k (k <= m + n)个数字拼接成一个新的数,要求从同一个数组中取出的数字保持其在原数组中的相对顺序。求满足该条件的最大数。结果返回一个表示该最大数的长度为k的数组。说明: 请尽可能地优化你算法的时间和空间复杂度。2、示例输入:nums1 = [3, 4, 6, 5]nums2 = [9, 1, 2, 5, 8, 3]k = 5输出:...

2020-12-23 23:40:43 189

原创 319灯泡开关(数学)

1、题目描述初始时有n个灯泡关闭。第 1 轮,你打开所有的灯泡。 第 2 轮,每两个灯泡你关闭一次。 第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭)。第i 轮,每i个灯泡切换一次开关。 对于第n轮,你只切换最后一个灯泡的开关。找出n轮后有多少个亮着的灯泡。提示:0 <= n <= 1092、示例输入:n = 3输出:1解释:初始时, 灯泡状态 [关闭, 关闭, 关闭].第一轮后, 灯泡状态 [开启, 开启, 开启...

2020-12-22 15:13:46 174

原创 318最大单词长度乘积(位运算)

1、题目描述给定一个字符串数组words,找到length(word[i]) * length(word[j])的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。2、示例输入: ["abcw","baz","foo","bar","xtfn","abcdef"]输出: 16解释: 这两个单词为 "abcw", "xtfn"。输入: ["a","ab","abc","d","cd","bcd","abcd"]输出: 4...

2020-12-22 11:38:45 100

原创 316去除重复字母(单调栈、贪心——总结)

1、题目描述给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。注意:该题与 1081 https://leetcode-cn.com/problems/smallest-subsequence-of-distinct-characters 相同提示:1 <= s.length <= 104s 由小写英文字母组成2、示例输入:s = “cbacdcbc”输出:“acdb”3、题解单调栈总

2020-12-21 17:14:33 236 1

原创 313超级丑数(动态规划多指针)

1、题目描述编写一段程序来查找第 n 个超级丑数。超级丑数是指其所有质因数都是长度为k的质数列表primes中的正整数。说明:1是任何给定primes的超级丑数。 给定primes中的数字以升序排列。 0 < k ≤ 100, 0 < n ≤ 106, 0 < primes[i] < 1000 。 第n个超级丑数确保在 32 位有符整数范围内。2、示例输入: n = 12, primes = [2,7,13,19]输出: 32...

2020-12-18 16:27:42 90 1

原创 312戳气球(动态规划,区间动态规划——困难)

1、题目描述有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组nums中。现在要求你戳破所有的气球。如果你戳破气球 i ,就可以获得nums[left] * nums[i] * nums[right]个硬币。这里的left和right代表和i相邻的两个气球的序号。注意当你戳破了气球 i 后,气球left和气球right就变成了相邻的气球。求所能获得硬币的最大数量。说明:你可以假设nums[-1] = nums[n] = 1,但...

2020-12-18 14:47:26 152

原创 310最小高度树(拓扑排序)

#include<iostream>#include<vector>#include<algorithm>#include<map>#include<list>using namespace std;class Solution {public: map<int,vector<int>> Map; //记录树节点的有向连接情况 int depth; //记录以当前节点为根节点的树的最大高度.

2020-12-17 20:40:01 167

原创 04内核数据结构

1、链表链表是linux内核中最简单同时也是应用最广泛的数据结构。链表是一种存放和操作可变数量元素的数据结构,动态创建,无需在内存中占用连续内存区。Linux内核的标准链表采用循环双向链表实现的。(1)单向链表和双向链表struct list_element{ void *data; /*有效数据*/ struct list_element *next; /*指向下一个元素的指针*/ /* struct list_element *prev; 加上就变成双向链表*/ };

2020-12-17 00:53:50 91

原创 03系统调用

1、系统调用的作用系统调用是用户空间访问内核的唯一手段,除异常和陷入外,它们是内核唯一的合法入口。系统调用在用户空间进程和硬件设备之间添加了一个中间层。它有三个作用:为用户空间提供一种硬件的抽象接口。如读写文件时,应用程序就可以不管磁盘类型和介质。 保证了系统的稳定和安全。内核可以基于权限、用户类型等规则对访问进行裁决。 告知内核自己在使用硬件以实现多任务和虚拟内存。内核知道了才能更好的管理分配。2、API、POSIX和C库的关系一般应用程序通过用户空间实现的应用编程接口(API)而不是直

2020-12-16 23:24:50 247

原创 309最佳买卖股票时机含冷冻期(动态规划)

1、题目描述给定一个整数数组,其中第i个元素代表了第i天的股票价格 。​设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。2、示例输入: [1,2,3,0,2]输出: 3解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]3、题解基本思想:动态规划,dp[i][0 or 1...

2020-12-16 13:57:12 77

原创 02进程调度

1、Linux的进程调度2、进程调度策略3、进程调度算法4、进程调度实现

2020-12-16 01:01:54 218

原创 307区域和检索 - 数组可修改(线段树)

1、题目描述给定一个整数数组 nums,求出数组从索引i到j(i≤j) 范围内元素的总和,包含i,j两点。update(i, val) 函数可以通过将下标为i的数值更新为val,从而对数列进行修改。说明:数组仅可以在update函数下进行修改。 你可以假设 update 函数与 sumRange 函数的调用次数是均匀分布的。2、示例Given nums = [1, 3, 5]sumRange(0, 2) -> 9update(1, 2)su...

2020-12-15 15:54:39 76

原创 306累加数(递归)

1、题目描述累加数是一个字符串,组成它的数字可以形成累加序列。一个有效的累加序列必须至少包含 3 个数。除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和。给定一个只包含数字'0'-'9'的字符串,编写一个算法来判断给定输入是否是累加数。说明:累加序列里的数不会以 0 开头,所以不会出现1, 2, 03 或者1, 02, 3的情况。进阶: 你如何处理一个溢出的过大的整数输入?2、示例输入: "112358"输出: true解释: 累加序列为: 1...

2020-12-14 20:54:53 160

原创 304二维区域和检索 - 矩阵不可变

1、题目描述给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1,col1) ,右下角为 (row2,col2)。上图子矩阵左上角(row1, col1) = (2, 1),右下角(row2, col2) = (4, 3),该子矩形内元素的总和为 8。说明:你可以假设矩阵不可变。 会多次调用sumRegion方法。 你可以假设row1 ≤ row2 且col1 ≤ col2。2、示例给定 matrix = [ [3, 0, 1, 4,...

2020-12-13 17:26:16 89

原创 303区域和检索 - 数组不可变

1、题目描述给定一个整数数组 nums,求出数组从索引i到j(i≤j)范围内元素的总和,包含i、j两点。实现 NumArray 类:NumArray(int[] nums) 使用数组 nums 初始化对象 int sumRange(int i, int j) 返回数组 nums 从索引i到j(i≤j)范围内元素的总和,包含i、j两点(也就是 sum(nums[i], nums[i + 1], ... , nums[j]))提示:0 <= nums.le...

2020-12-13 15:15:58 49

原创 01进程管理

1、

2020-12-13 14:54:30 138

原创 301删除无效的括号(广度优先搜索,BFS——困难)

1、题目描述删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果。说明: 输入可能包含了除(和)以外的字符。2、示例输入: "()())()"输出: ["()()()", "(())()"]3、题解为何用BFS而不是DFS?利用BFS理解起来要远远比DFS要简单的多,因为这道题说的是删除最少的括号!!,如果我们每次只删除一个括号,然后观察被删除一个括号后是否合法,如果已经合法了,我们就不用继续删除了。因此我们并不需要将遍历进行到底,而是层层深入,一旦达到需求...

2020-12-12 17:42:36 158

原创 300最长上升子序列(动态规划+二分查找)

1、题目描述给定一个无序的整数数组,找到其中最长上升子序列的长度。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 你算法的时间复杂度应该为O(n2) 。进阶: 你能将算法的时间复杂度降低到O(n log n) 吗?2、示例输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是[2,3,7,101],它的长度是 4。3、题解基本思想:动态规划+二分查找,时间复杂度O(NlogN)维护一个cell数组,cell...

2020-12-10 23:00:57 118

原创 299猜数字游戏(哈希表,set,桶思想)

1、题目描述你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下:你写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个提示,告诉他的猜测数字中有多少位属于数字和确切位置都猜对了(称为“Bulls”, 公牛),有多少位属于数字猜对了但是位置不对(称为“Cows”, 奶牛)。朋友根据提示继续猜,直到猜出秘密数字。请写出一个根据秘密数字和朋友的猜测数返回提示的函数,返回字符串的格式为 xAyB ,x 和 y 都是数字,A 表示公牛,用B表示奶牛。..

2020-12-10 14:24:14 194

原创 297二叉树的序列化与反序列化(前序遍历,递归)

1、题目描述序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。提示:这与 LeetCode 目前使用的方式一致,详情请参阅LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采..

2020-12-09 23:25:49 52

原创 292Nim 游戏(智力题)

1、题目描述你和你的朋友,两个人一起玩Nim 游戏:桌子上有一堆石头。你们轮流进行自己的回合,你作为先手。每一回合,轮到的人拿掉1 - 3 块石头。拿掉最后一块石头的人就是获胜者。假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 false 。2、示例输入:n = 4输出:false解释:如果堆中有 4 块石头,那么你永远不会赢得比赛;因为无论你拿走 1 块、2 块 还是 3 块石头,最...

2020-12-08 23:24:56 218

原创 295数据流的中位数(大小堆)

1、题目描述中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4]的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。进阶:如果数据流中所有整数都在 0 到 100 范围内,你将如何优化你的算法?如果数据流中 99% 的整数.

2020-12-08 23:10:18 121

原创 289生命游戏(原地操作)

1、题目描述根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为活细胞(live),或 0 即为死细胞(dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;如果活细胞周围八个..

2020-12-07 23:22:51 131

原创 290单词规律(哈希表)

1、题目描述给定一种规律 pattern和一个字符串str,判断 str 是否遵循相同的规律。这里的遵循指完全匹配,例如,pattern里的每个字母和字符串str中的每个非空单词之间存在着双向连接的对应规律。说明:你可以假设pattern只包含小写字母,str包含了由单个空格分隔的小写字母。2、示例输入: pattern = "abba", str = "dog cat cat dog"输出: true输入:pattern = "abba", str = ...

2020-12-07 17:58:04 103

原创 21配接器(adapters)

0、前言STL的六大组件,容器是以类模板完成,算法是以函数模板完成,仿函数是一种将operator()重载的类模板,迭代器是一种将operator++和operator*等指针习惯行为重载的类模板,配接器则复杂很多不同配接器实现不同,容器配接器和迭代器配接器是一种类模板,函数配接器是一种函数模板。1、配接器概述与分类配接器的定义:将一个class的接口转换为另一个class的接口,使得原本接口不兼容而不能合作的class可以一起运作。配接器在STL组件的灵活组合运用功能上,扮演着轴承、转接器的角

2020-12-06 23:16:55 211

原创 20仿函数(functors)

1、仿函数概述仿函数(functors)是早期的命名,新名称是函数对象(function objects)。函数对象是指一种具有函数特质的对象,所以仿函数的本质就是一个行为类似函数的对象,仿函数主要用途是搭配STL算法。这种东西在调用者可以像函数一样地被调用,在被调用者则以对象所定义的function call operator()扮演函数的实质角色。仿函数相比于函数指针的优势在于函数指针不能满足STL对抽象性的要求也不满足软件积木的要求,函数指针无法和STL其他组件搭配,产生更灵活的变化。STL仿

2020-12-06 15:59:39 383

原创 19其他算法(algo)——复杂的算法

1、一些复杂的算法例如:lower_bound、upper_bound、binary_search、next_permutation、prev_permutation、random_shuffle、partial_sort、partial_sort_copy、sort、equal_range、inplace_merge、nth_element、merge sort等。2、lower_bound这是二分查找的一种版本,在已排序的[first,last)中寻找大于等于value的第一个元素,返回该元

2020-12-05 23:35:40 699

空空如也

空空如也

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

TA关注的人

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