自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Linux】一文搞懂socket网络编程!!!附详细代码

tcp网络编程,udp网络编程,附详细代码。

2020-12-21 12:14:13 1095 8

原创 【Linux】一篇文章彻底搞定信号!

信号1.信号是什么?2.信号的种类3.信号的产生3.1硬件产生3.2软件产生4.信号的注册4.1非可靠信号的注册4.2可靠信号的注册5.信号的注销5.1非可靠信号的注销5.2可靠信号的注销6.信号阻塞6.1信号是怎样阻塞的?6.2sigprocmask7.信号未决7.1未决概念7.2sigpending8.信号的处理方式8.1signal函数8.2sigaction函数8.3自定义信号处理的流程9.信号的捕捉9.1信号捕捉的条件9.2信号捕捉流程10.常用信号集操作函数11.SIGCHLD信号

2020-11-19 17:15:32 2190 14

原创 复杂链表的复制

题目描述:请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。链接:https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof1.哈希表建立映射关系,当前节点和复制的节点。复制的节点为新开辟出来的节点开辟出来的节点next节点,为源节点的下一个节点的映射开辟出来的节点random节点,为源

2021-01-17 20:22:30 15

原创 二叉树中和为某一值的路径

题目描述:输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。链接:https://leetcode-cn.com/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof/解题思路:某一值的路径,则二叉树最后节点必须为叶子节点采用dfs + 回溯代码:class Solution {public: vector<vector<

2021-01-17 16:16:58 11

原创 二叉搜索树的后序遍历序列

题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-hou-xu-bian-li-xu-lie-lcof/解题思路:二叉搜索树的后序遍历序列。则最后的为根节点后序遍历时,左子树的值都比根节点值小当某节点比根节点值大时,则该节点为右子树,即右子树的值均大于根节点的值基于第三

2021-01-17 16:02:24 25

原创 从上到下打印二叉树

1.Ⅰ从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof/采用二叉树的层序遍历:可采用递归和迭代的方式遍历1.1递归先保存根节点的值,再保存左右节点的值,并进行递归,当当前节点为空时,则直接返回。代码:class Solution {public: vector<int> ret;//返回的vecto

2021-01-16 16:32:58 18 1

原创 栈的压入、弹出序列

题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。链接:https://leetcode-cn.com/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof思路:判断一个序列是否为栈的弹出序列时,可考虑将元素入栈,再进行判

2021-01-16 15:52:51 8

原创 包含min函数的栈

题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。该题主要是在调用min函数时,可以得到栈中的最小值。借用一个辅助栈辅助栈为空时,直接放入元素,辅助栈不为空时,若出栈的元素和辅助栈栈顶元素相等,则辅助栈和栈同时出栈入栈时,入栈元素与辅助栈栈顶相等时,则辅助栈需要将该元素入栈代码:class MinStack {public: /** initialize your data

2021-01-16 15:38:00 19 1

原创 对称的二叉树

题目描述:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。链接:https://leetcode-cn.com/problems/dui-cheng-de-er-cha-shu-lcof/1.递归思路:递归的思路很容易想两节点不同时为空时,则不是对称的两节点同时为空,则是对称的两节点值不相等时,则不是对称的递归传递的条件,必须是一棵树的左边另一颗树的右边。和一颗树的右边和另一颗树的左边。这样的树的比较最后,才是对称的。代码:class

2021-01-08 11:12:38 8

原创 二叉树的镜像

题目描述:请完成一个函数,输入一个二叉树,该函数输出它的镜像。示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]代码:class Solution {public: TreeNode* mirrorTree(TreeNode* root) { if(root == nullptr) return nullptr; TreeNode* left = mirrorTree(root-

2021-01-07 14:55:38 8

原创 合并两个排序的链表

题目描述:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof1.哨兵节点思路:先开辟一个临时节点,作为头节点,这样能避免头节点的更改。当两个链表不同时为空时,判断该头节点目前

2021-01-07 12:01:25 12

原创 反转链表

题目描述:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL链接:https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof1. 迭代思路:借用双指针首先,p指针指向头节点q指针指向p的next节点,此时,将p的next节点置为空当q指针直接不为空时

2021-01-07 11:39:44 9

原创 链表中倒数第k个节点

题目描述:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.1.快慢指针法思路:借用两个指针,快慢指针快指针先走k步当快指针不为空时,快慢指针同时向后走快指针为空时,返回慢指针图例:

2021-01-07 10:55:43 12

原创 调整数组顺序使奇数位于偶数前面

题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。链接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof1. 一行代码代码:class Solution

2021-01-07 10:11:42 9

原创 二叉树的前序、中序、后序、层序遍历

二叉树的前序、中序、后序、层序遍历。递归、非递归、morris版本遍历

2021-01-04 21:27:24 50 2

原创 删除链表的节点

题目描述:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.链接:https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof1. 双指针法借用两个指针,cur

2021-01-04 13:29:23 24

原创 打印从1到最大的n位数

题目描述:输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]链接:https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/1. 无大数情况可采用快速幂 + 逐个遍历的方式。快速幂的求解可参考一下博主的上一篇文章:https://blog.csdn.

2021-01-04 12:51:56 20

原创 数值的整数次方

数值的整数次方

2021-01-03 14:45:36 28

原创 二进制中1的个数

二进制中1的个数

2021-01-03 13:56:30 30

原创 二叉搜索树的插入、删除

1.插入题目描述:给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。链接:https://leetcode-cn.com/problems/insert-into-a-binary-search-tree2. 删除给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索

2021-01-02 17:08:53 1047 3

原创 剪绳子

题目描述:给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。链接:https://leetcode-cn.com/problems/jian-sheng-zi-lcof...

2021-01-02 16:14:58 92 2

原创 机器人的运动范围

题目描述:地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?链接:https://leetcode-cn.com/problems/ji-qi-ren

2021-01-01 13:47:02 33

原创 验证二叉树

题目描述:二叉树上有 n 个节点,按从 0 到 n - 1 编号,其中节点 i 的两个子节点分别是 leftChild[i] 和 rightChild[i]。只有 所有 节点能够形成且 只 形成 一颗 有效的二叉树时,返回 true;否则返回 false。如果节点 i 没有左子节点,那么 leftChild[i] 就等于 -1。右子节点也符合该规则。注意:节点没有值,本问题中仅仅使用节点编号。链接:https://leetcode-cn.com/problems/validate-binary-t

2020-12-31 15:26:09 13

原创 矩阵中的路径

题目描述:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[[“a”,“b”,“c”,“e”],[“s”,“f”,“c”,“s”],[“a”,“d”,“e”,“e”]]但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第

2020-12-31 15:13:30 24

原创 搜索旋转数组

1. 原题:题目描述:升序排列的整数数组 nums 在预先未知的某个点上进行了旋转(例如, [0,1,2,4,5,6,7] 经旋转后可能变为 [4,5,6,7,0,1,2] )。请你在数组中搜索 target ,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。链接:https://leetcode-cn.com/problems/search-in-rotated-sorted-array示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出:

2020-12-26 17:09:50 21

原创 旋转数组的最小数字

题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:01.暴力查找思路:循环一遍,找最小值即可。代码:时间复杂度O(N)class Solution {public: int minArray(vect

2020-12-26 13:59:39 17

原创 青蛙跳台阶问题

题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。链接:https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof1. dp思路:对于每一次跳的阶数,要么是1层,要么是2层,则到达第n层的次数为dp[n] = dp[n - 1] + dp[n - 2],和斐波那契数列一

2020-12-25 13:50:42 26

原创 斐波那契数列

题目描述:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:1示例 2:输入:n = 5输出:5链接

2020-12-24 13:29:12 146

原创 用两个栈实现队列、用队列实现栈

1.两个栈实现队列题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出: [null,null,3,-1]示例 2:输入:[“CQueue”,“deleteHe

2020-12-23 13:48:04 19

原创 重建二叉树

题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:链接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/1. 递归思路分析:前序遍历第一个为根节点,找到中序遍历的根节点,中序遍历左边为左子树,中序遍历右

2020-12-22 13:32:16 27

原创 从尾到头打印链表

题目描述:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入: head = [1,3,2]输出: [2,3,1]链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/1. 数组逆置法思路分析:将链表数据放到数组中,然后对数组进行逆置。代码:class Solution {public: vector<int> reversePrint(

2020-12-21 23:16:14 53

原创 替换空格

题目描述:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/示例 1:输入: s = “We are happy.”输出: “We%20are%20happy.”思路分析:从后往前遍历字符串,遇到空格时,插入02%,最后对返回的字符串进行反转。代码:class Solution {public: string replaceSpace(string s)

2020-12-19 11:45:59 30 1

原创 二维数组中的查找

题目描述:在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof1.暴力查询思路分析:遍历整个二维数组,相等则返回true代码:class Solution {public: bool findNumberIn2

2020-12-18 16:38:35 32 1

原创 数组中重复的数字

题目描述:找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof1. 利用临时数组思路分析:nums数组中n最大范围为10000,则开辟一个这样大的临时数组,对nums数组进行遍历,将其值对应的临时数组下

2020-12-17 21:06:37 34

原创 CentOs中to_string用不了

编译的时候带上:-std=c++0xmain:test.cpp g++ -std=c++0x $^ -o $@ -g

2020-12-13 17:07:05 29

原创 有序链表转换二叉搜索树

题目描述:给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:链接:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tre

2020-12-13 13:53:39 19

原创 二叉搜索树与双向链表

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。为了让您更好地理解问题,以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。特别地,我们希望可以就地完成转换操作。当转化完成以后,树中节点的左指针需要指向前驱

2020-12-12 22:52:53 20

原创 扁平化多级双向链表

题目描述:多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。链接:https://leetcode-cn.com/problems/flatten-a-multilevel-doubly-linked-list示例 1:输入:head = [1,2,3,4,5,6,null,null,

2020-12-11 16:46:58 34 1

原创 奇偶链表

题目描述:给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。链接:https://leetcode-cn.com/problems/odd-even-linked-list思路分析:分别定义奇链表的头部和偶链表的头部,让该链表同时向后走,当有一个为空时,终止循环,奇链表尾部指向偶链表头部。代码:

2020-12-11 11:25:08 21

转载 蓄水池抽样算法

问题:从n个元素中随机抽取k个元素,其中N无法确定。解法:我们总是选择第一个对象,以1/2的概率选择第二个,以1/3的概率选择第三个,以此类推,以1/m的概率选择第m个对象。当该过程结束时,每一个对象具有相同的选中概率,即1/n,证明如下。证明:第m个对象最终被选中的概率P=选择m的概率*其后面所有对象不被选择的概率,即对应蓄水池抽样问题,可以类似的思路解决。先把读到的前k个对象放入“水库”,对于第k+1个对象开始,以k/(k+1)的概率选择该对象,以k/(k+2)的概率选择第k+2个对象,以此类推

2020-12-10 15:36:13 20

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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