自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 unicode字符集和utf-8编码

字符集和编码我们在实际开发中, 经常需要处理文本信息, 组成文本的单元我们称之为字符计算机只能处理0和1, 不能直接处理这些字符, 比如说对字符的读取和存储为了解决这个问题, 我们可以建立一个数字与字符的关联关系, 比如说使用97 -> a, 98 -> b, 99 -> c…依据数字可以查询对应字符, 依据字符可以查询对应数字这样我们需要处理字符的时候, 就可以先查询这个映射, 找到字符对应的数字, 然后把这个数字转换成二进制存储即可, 读取的时候亦然字符集: 为每一个字符分

2021-06-27 22:08:55 851 1

原创 数据库事务入门

场景我们拿经典的转账场景来说明事务是什么现在有这么一个场景,银行系统中有一个A账户和一个B账户,A账户和B账户中都有1000元,A账户想要给B账户转账100元,包括以下两个步骤:A账户扣除100元B账户增加100元理想情况下,上面的步骤1和步骤2都成功了,A账户扣除100元,最终为900元,B账户增加100元,最终为1100元。但是,在现实场景中有很多失败的情况,比如步骤1成功了,步骤2失败,这个时候A账户扣除100元,最终为900元,B账户却没有增加100元,还是为1000元。这个时候数据就

2021-06-04 09:05:40 449

原创 brew安装mysql和修改密码

安装mysql搜索mysqlbrew search mysql安装mysqlbrew install mysql安装指定版本brew install [email protected]卸载mysqlbrew uninstall mysql查看mysql的基本信息,比如说怎么启动服务之类的brew info mysql查看mysql的安装路径brew list mysql基础命令// 启动// 后台brew services start mysql// 前台mysql.serv

2021-04-02 13:21:29 1502 2

原创 Typora+PicGo+Gitee搭建写作环境

简介Typora - 支持markdown的写作软件,但是不支持图片上传PicGo - 支持图片上传的软件Gitee - 用来存储上传图片的网站Typora百度typora,然后直接去官网下载即可PicGo打开刚才下载的Typora,找到全局图像设置,如下图[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AINrzd3c-1614699418192)(/Users/chengrui/Desktop/%E6%88%AA%E5%B1%8F2021-03-02%

2021-03-02 23:38:08 300

原创 golang环境搭建

安装golang可以去golang中国网站下载安装:https://golang.google.cn/选择对应操作系统的golang,下载安装即可设置环境变量查看本机shellecho $SHELLmacbook高版本系统默认使用zsh如果是bash,在bash_profile中设置环境变量vim ~/.bash_profile如果是zsh,在zshrc中设置环境变量vim ~/.zshrc然后按E键进入编辑模式添加以下配置# gopathexport GOPATH=/Us

2021-02-22 20:43:28 262

原创 golang基础数据类型-布尔和字符

布尔型一个布尔类型的值只有两种:true和false字符golang中没有专门的字符类型,一般使用byte或rune来保存单个字符其中byte是int8的别名,rune是int32的别名// byte is an alias for uint8 and is equivalent to uint8 in all ways. It is// used, by convention, to distinguish byte values from 8-bit unsigned// integer

2021-01-24 20:12:53 228

原创 golang基础数据类型-字符串

一个字符串是一个不可改变的字节序列,字符串可以包含任意数据,文本字符串通常被解释为采用UTF8编码的Unicode码点(rune)序列表现形式golang中的字符串支持两种表现形式func TestString(t *testing.T) { // 形式一: 双引号,会识别转义字符 str1 := "这是字符串的表现形式一。\n你可以看到换行了" // 形式二: 反引号,以字符串的原生形式输出,包括换行和特殊字符,可以防止攻击,输出源代码等效果 str2 := `源代码fu

2021-01-24 20:11:25 314

原创 golang基础数据类型-浮点型

go语言提供了两种精度的浮点数,float32和float64// float32 is the set of all IEEE-754 32-bit floating-point numbers.type float32 float32// float64 is the set of all IEEE-754 64-bit floating-point numbers.type float64 float64零值和默认类型func TestFloat(t *testing.T) {

2021-01-22 19:30:16 489

原创 golang基础数据类型-整型

go同时提供了有符号和无符号的整数类型有符号// int8 is the set of all signed 8-bit integers.// Range: -128 through 127.type int8 int8// int16 is the set of all signed 16-bit integers.// Range: -32768 through 32767.type int16 int16// int32 is the set of all signed 32-b

2021-01-22 17:33:49 391

原创 个人面试记录 - 抖音音乐11.13~11.30

一面 - 11.13晚上八点自我介绍redis,多线程lpush的情况下是否会出现数据覆盖问题,为什么?假设现在有一个场景,不管怎么优化,读取db时间固定为1s,怎么解决?写一个sql,统计上个月销量前10的商品表名:production字段名:id name price create_time ISN cnt建立联合索引(create_time, name),下面这句查询语句会用到哪些索引?where name= '奥利奥' and create_time >'2020-09-10

2020-12-02 10:29:24 463

原创 剑指 Offer 57 - II. 和为s的连续正数序列

题目输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]限制:1 <= target <= 10^5来源:力扣(LeetCode)链接:https://leetcode-cn.com/pro

2020-11-06 14:46:38 190

原创 剑指 Offer 57. 和为s的两个数字

题目输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]限制:1 <= nums.length <= 10^51 <= nums[i] <=

2020-11-06 11:14:53 174 1

原创 剑指 Offer 55 - II. 平衡二叉树

题目输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。示例 1:给定二叉树 [3,9,20,null,null,15,7]返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4]返回 false 。限制:1 <= 树的结点个数 <= 10000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/ping-h

2020-11-06 10:19:55 176

原创 剑指 Offer 55 - I. 二叉树的深度

题目输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。例如:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。提示:节点总数 <= 10000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/er-cha-shu-de-shen-du-lcof解题思路基本思路是使用递归计算高度基本思路:当前节点为null,高

2020-11-06 09:28:39 128

原创 剑指 Offer 54. 二叉搜索树的第k大节点

题目给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:示例 2:限制:1 ≤ k ≤ 二叉搜索树元素个数来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof解题思路二叉搜索树左子节点的值 < 根节点的值右子节点的值 > 根节点的值中序遍历是一个递增序列题目是要求第k大的节点二叉搜索树的中序遍历为:左根右,是一个递增序列

2020-11-05 16:38:51 150

原创 剑指 Offer 53 - II. 0~n-1中缺失的数字

题目一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 8限制:1 <= 数组长度 <= 10000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof

2020-11-05 15:12:35 694

原创 剑指 Offer 53 - I. 在排序数组中查找数字 I

题目统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0限制:0 <= 数组长度 <= 50000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof解题

2020-11-05 09:41:20 156

原创 剑指 Offer 52. 两个链表的第一个公共节点

题目输入两个链表,找出它们的第一个公共节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [

2020-11-02 21:11:39 155

原创 剑指 Offer 49. 丑数

题目我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。说明:1 是丑数。n 不超过1690。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/chou-shu-lcof解题思路一个丑数 *2, *3, *5的结果还是一个丑数所有的丑数其

2020-11-02 14:11:46 161

原创 剑指 Offer 47. 礼物的最大价值

题目在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物提示:0 < grid.length <= 2000 < grid[0].l

2020-11-02 10:15:46 160

原创 剑指 Offer 48. 最长不含重复字符的子字符串

题目请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列

2020-11-01 21:51:52 196

原创 剑指 Offer 50. 第一个只出现一次的字符

题目在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。示例:s = “abaccdeff”返回 “b”s = “”返回 " "限制:0 <= s 的长度 <= 50000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof解题思路本题使用哈希表来解决创建一个有序哈希表字符串转换成字符

2020-11-01 13:23:08 122

原创 剑指 Offer 42. 连续子数组的最大和

题目输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为6。提示:1 <= arr.length <= 10^5-100 <= arr[i] <= 100来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/l

2020-11-01 10:57:09 173 2

原创 剑指 Offer 41. 数据流中的中位数

题目如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。示例 1:输入:

2020-10-30 18:27:02 134

原创 215. 数组中的第K个最大元素

题目在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/kth-largest-eleme

2020-10-29 20:30:33 117

原创 剑指 Offer 40. 最小的k个数

题目输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 1:输入:arr = [3,2,1], k = 2输出:[1,2] 或者 [2,1]示例 2:输入:arr = [0,1,2,1], k = 1输出:[0]限制:0 <= k <= arr.length <= 100000 <= arr[i] <= 10000来源:力扣(LeetCode)链接:ht

2020-10-29 20:02:25 159

原创 剑指 Offer 39. 数组中出现次数超过一半的数字

题目数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof解题思

2020-10-29 16:10:19 111

原创 剑指 Offer 38. 字符串的排列

题目输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = “abc”输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]限制:1 <= s 的长度 <= 8来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/zi-fu-chuan-de-pai-lie-lcof解题思路全排列问题,使用回溯法解决不能有重复元素,两种解

2020-10-29 15:11:30 242

原创 剑指 Offer 37. 序列化二叉树

题目请实现两个函数,分别用来序列化和反序列化二叉树。示例:解题思路序列化:其实就是把二叉树用字符串表示出来,可以考虑使用二叉树的遍历:前序,中序,后序,层次这里我们使用前序遍历,即根左右的顺序创建一个list,用来保存前序遍历的结果前序遍历判断当前是否为空,为空则添加null字符串,直接返回添加当前节点的值递归左子树递归右子树把list转换成字符串返回反序列化:其实就是依据字符串创建二叉树,使用和序列化时相同的方式即可对字符串进行校验把字符串切割,创建一个字符串

2020-10-29 11:26:41 301 1

原创 剑指 Offer 36. 二叉搜索树与双向链表

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

2020-10-28 21:10:42 136

原创 剑指 Offer 35. 复杂链表的复制

题目请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。示例 1:输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]示例 2:输入:head = [[1,1],[2,1]]输出:[[1,1],[2,1]]示例 3:输

2020-10-28 17:21:52 129

原创 剑指 Offer 31. 栈的压入、弹出序列

题目输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行: push(1), push(2), push(3), pus

2020-10-28 15:15:35 143

原创 剑指 Offer 30. 包含min函数的栈

题目定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();minStack.top(); --> 返回 0.

2020-10-28 12:41:37 128 1

原创 剑指 Offer 29. 顺时针打印矩阵

题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制:0 <= matrix.length <= 1000 <= matrix[i].length &lt

2020-10-28 10:19:47 143 1

原创 剑指 Offer 25. 合并两个排序的链表

题目输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4限制:0 <= 链表长度 <= 1000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof解题思路因为两个链表都是递增的,

2020-10-27 12:38:05 138

原创 剑指 Offer 24. 反转链表

题目定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof解题思路解题思路有两种:迭代和递归迭代:定

2020-10-27 11:15:24 135

原创 剑指 Offer 22. 链表中倒数第k个节点

题目输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/lian-biao-zhong-dao

2020-10-27 10:36:47 111

原创 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

题目输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。提示:1 <= nums.length <= 500001 <= nums[i] <= 10000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/diao-zheng-shu

2020-10-27 10:16:47 99

原创 剑指 Offer 18. 删除链表的节点

题目给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函

2020-10-26 11:24:46 102

原创 剑指 Offer 17. 打印从1到最大的n位数

题目输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]说明:用返回一个整数列表来代替打印n 为正整数来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof解题思路不考虑大数版本情况下很简单,其实就是依次

2020-10-26 10:42:49 232

空空如也

空空如也

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

TA关注的人

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