自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 震惊!最左前缀原则失效了??

问题Mysql中组合索引的最左前缀原则想必大家都很熟悉,最近在学习的时候,我进行了几个小实验发现了一些很有趣的问题(测试环境为Mysql8.0.23)表结构如下:表里的字段只有主键索引(id)和联合索引(a,b,c)这个数据库表创建了(a,b,c)这个联合索引,当我们创建组合索引abc时,Mysql其实维护了3个索引:a,ab和abc。最左前缀原则要求从左至右依次命中组合索引,要能使其生效必须保证 where 条件里最左边是 a 字段,比如以下这几种情况:where a =...

2021-08-07 17:39:20 1099

原创 存储器的层次结构

存储器层次结构总览图(截取自 图解系统-小林coding)对于存储器,它的速度越快、能耗会越高、而且材料的成本也是越贵的,以至于速度快的存 储器的容量都比较小。在此图中越靠近cpu的存储器访问速度越快,寄存器是访问速度最快的存储器。其中寄存器和cpu cache都在cpu的内部。L1和L2 cache是每个核心独有的,L3 cache是所有核心公用的。cpu并不会直接和每一种存储器设备打交道,每一种存储器设备只和它相临的存储器设备打交道。如何写出更高效的代码?提高缓存的命中..

2021-06-16 09:52:43 490

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

输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。滑动窗口法class Solution {public: int maxSubArray(vector<int>& nums) { int start = 0,end =...

2021-06-16 09:16:50 60

原创 5. 最长回文子串

给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"示例 3:输入:s = "a"输出:"a"示例 4:输入:s = "ac"输出:"a"来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindromic-substring著作权归领扣网络所有。商.

2021-06-15 23:27:35 149

原创 1. 两数之和

class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int,int> mp; for(int i=0;i<nums.size();i++) { if(mp.count(target - nums[i])) ret...

2021-06-01 20:53:18 41

原创 剑指 Offer 56 - II. 数组中数字出现的次数 II

在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。示例 1:输入:nums = [3,4,3,3]输出:4示例 2:输入:nums = [9,1,7,9,7,9,7]输出:1思路1:可以使用map记录次数,第一次遍历nums数组,第二次遍历map,时间复杂度O(n+m),空间复杂度O(m)(n为数组长度,m为数字的个数)。思路2:使用一个位图记录所有数字在二进制每一位为1的数量,int表示的范围是2的32次方,所以只需要一个大.

2021-05-26 18:08:25 38

原创 剑指 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思路:数组有序,所以使用二分法,如果nums[m] == m,说明缺少的数字在数组右半部分;如果nums[m] != m,判断m是否为0以及m-1和nums[m-1]是否相等,如果满足条件,说明缺少的数是m,否..

2021-05-26 16:49:56 38

原创 剑指 Offer 45. 把数组排成最小的数

输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。示例 1:输入: [10,2]输出: "102"示例2:输入: [3,30,34,5,9]输出: "3033459"思路:定义一个比较函数class Solution {public: string minNumber(vector<int>& nums) { sort(nums.begin(),nums.end(),cmp); .

2021-05-25 22:03:51 50

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

思路:使用一个大根堆一个小根堆,在添加元素时,如果两个堆的元素个数相同,选择一个堆先push(此处可以任意选择,这里我选择小根堆),然后向另一个堆压入push堆的堆顶元素。如果两堆元素个数不同的话则调换执行操作的两堆的顺序。此时会有一中位数,以此为界限,比中位数小的元素都在大根堆中,比中位数小的元素都在小根堆中。获得中位数时,如果两堆元素个数不等,则取大根堆的top(),因为我在压入元素时,如果两堆元素相等会在大根堆压入。如果元素个数相等则取两堆top()的平均值,注意转换为double否则会丢失...

2021-05-24 11:33:46 66

原创 剑指 Offer 33. 二叉搜索树的后序遍历序列

class Solution {public: bool core(vector<int>& postorder,int l,int r) { if(l >= r) return true;//如果结点树小于等于1 说明是二叉搜索树 int p = l; while(postorder[p] < postorder[r]) p++; int m = p;//m是左右.

2021-05-23 23:54:39 181

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

剑指 Offer 36. 二叉搜索树与双向链表将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。采用中序遍历的思想,递归处理左根右。dfs结束后将首尾相连,头结点的left指针指向尾结点,尾结点的right指针指向头结点,返回头结点。代码如下class Solution {public: Node* head,*pre; Node* treeToDoublyLis.

2021-05-23 23:23:24 49

空空如也

空空如也

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

TA关注的人

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