自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 常用的STL方法

string:stoi() PS. string > intto_string() PS. int/long > stringstr.find() != str.nposstr.substr(index,length) PS. length+index>str.length() 时,到字符串末位iterator: 常见的ST...

2019-11-08 11:21:23 284

原创 SQLCipher核心思想

iv是一段随机数,可以保证每一页的iv值都不一样。和page data一起作用,用于生成hmac值。hmac是一段校验和,可以用来检查page data是否损坏。加密实现是通过派生后的key+盐值,对原始page加密,生成加密数据。然后通过iv,对加密数据生成校验和hmac值。

2023-06-20 10:06:21 675

原创 LeetCode2. 两数相加

/** * 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 * * 请你将两个数相加,并以相同形式返回一个表示和的链表。 * * 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 * * * * 示例 1: * * * 输入:l1 = [2,4,3], l2 = [5,6,4] * 输出:[7,0,8] * 解释:342 + 465 = 807. * 示例 2: * * 输入:l1 =

2022-03-14 20:20:58 135

原创 LeetCode589. N 叉树的前序遍历

/** * 给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。 * * n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。 * * * 示例 1: * * * * 输入:root = [1,null,3,2,4,null,5,6] * 输出:[1,3,5,6,2,4] * 示例 2: * * * * 输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,

2022-03-10 20:51:00 255

原创 LeetCode104. 二叉树的最大深度

/** * 给定一个二叉树,找出其最大深度。 * * 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 * * 说明: 叶子节点是指没有子节点的节点。 * * 示例: * 给定二叉树 [3,9,20,null,null,15,7], * * 3 * / \ * 9 20 * / \ * 15 7 * 返回它的最大深度 3 。 * * 来源:力扣(LeetCode) * 链接:https://leetcode-cn.

2022-03-07 21:33:22 105

原创 LeetCode101. 对称二叉树

/** * 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 * * 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 * * * * 示例 1: * * * 输入:p = [1,2,3], q = [1,2,3] * 输出:true * 示例 2: * * * 输入:p = [1,2], q = [1,null,2] * 输出:false * 示例 3: * * * 输入:p = [1,2,1], q = [1,1,2

2022-03-07 21:11:42 57

原创 LeetCode100. 相同的树

/** * 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 * * 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 * * * * 示例 1: * * * 输入:p = [1,2,3], q = [1,2,3] * 输出:true * 示例 2: * * * 输入:p = [1,2], q = [1,null,2] * 输出:false * 示例 3: * * * 输入:p = [1,2,1], q = [1,1,2

2022-03-07 21:03:02 67

原创 LeetCode938. 二叉搜索树的范围和

/** * 给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。 * * * * 示例 1: * * * 输入:root = [10,5,15,3,7,null,18], low = 7, high = 15 * 输出:32 * 示例 2: * * * 输入:root = [10,5,15,3,7,13,18,1,null,6], low = 6, high = 10 * 输出:23 * * * 提示: * * 树中

2022-03-07 20:47:10 59

原创 LeetCode504. 七进制数

/** * 给定一个整数 num,将其转化为 7 进制,并以字符串形式输出。 * * * * 示例 1: * * 输入: num = 100 * 输出: "202" * 示例 2: * * 输入: num = -7 * 输出: "-10" * * * 提示: * * -107 <= num <= 107 * * 来源:力扣(LeetCode) * 链接:https://leetcode-cn.com/problems/base-7 * 著作权归领

2022-03-07 20:10:04 209

翻译 SQLCipher文档(未完待续)

文章目录概要关于SQLCipher设计安全性数据库加密和临时文件包装SQLCipher API内容表PRAGMA key——设置数据库密码或密钥示例一:密码加密示例二:密钥加密(没有密钥加密的过程)示例三:带盐值的密钥加密(没有密钥加密的过程)测试key要点sqlite3_key()和sqlite3_key_v2()——设置数据库密码或密钥PRAGMA rekey——重新设置数据库密码或密钥示例要点概要关于SQLCipher是一个利用256bit AES加密SQLite文件的开源库。SQLCiphe

2021-10-21 21:51:06 3101

翻译 SQLite学习笔记(未完待续)

SQLite学习笔记Write-Ahead Logging1. 概述SQLite实现原子提交和回滚的默认方法是rollback journal。从3.7.0版本开始,可以使用Write-Ahead Log(简称WAL)。WAL模式的优点:在大多数场景明显更快;读写操作可并发;顺序访问磁盘;使用fsync()操作更少,因此在调用fsync()中断的系统上更不容易发生问题;WAL模式的缺点:WAL模式通常要求VFS支持共享内存(例外情况见: WAL without shared mem

2021-10-19 21:01:29 1218

原创 OpenHarmony轻量和小型系统开发指导(未完待续)

配置环境使用Ubuntu20.04,自带Python3.8。安装必要工具sudo apt install git git-lfs build-essential gcc g++ make zlib* libffi-dev e2fsprogs pkg-config flex bison perl bc openssl libssl-dev libelf-dev libc6-dev-amd64 binutils binutils-dev libdwarf-dev u-boot-tools mtd-util

2021-10-08 11:23:39 1461 1

原创 使用FlameGraph生成火焰图

安装Perf#对于Linux内核版本高于2.6.31的系统,源码里有perf,root用户可以直接在这个路径编译安装,非root用户可以拷贝出来cp /usr/src/linux-source-3.13.0 ~cd ~/linux-source-3.13.0/tools/perfmake && make install如果报了-Werror=implicit-fallthrough=、-Werror=format-truncation=之类的告警,是因为有-Werror的编译选项

2021-09-23 14:46:46 676

原创 C++避免死锁的几种写法

C++避免死锁的几种写法class Person() {public: void SetName(std::string name) { std::lock_guard<std::mutex> lock(nameMutex_); name_ = name; } void SetBirthday(Date date) { std::lock_guard<std::mutex> lock(birthdayMutex_); birthday_ = da

2021-07-07 20:57:42 789

原创 C++读写锁

读写锁class Student {public: void SetTeacher(const Teacher &teacher) { std::lock_guard<std::mutex> lock(teacherMutex_); teacher_ = teacher; } Teacher GetTeacher(const Teacher &teacher) const { std::lock_guard<std::mutex>

2021-07-07 19:56:42 1609

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

/** * 输入一个字符串,打印出该字符串中字符的所有排列。 * * * * 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。 * * * * 示例: * * 输入:s = "abc" * 输出:["abc","acb","bac","bca","cab","cba"] * * * 限制: * * 1 <= s 的长度 <= 8 * * 来源:力扣(LeetCode) * 链接:https://leetcode-cn...

2021-06-03 21:26:44 182

原创 LeetCode77. 组合

/** * 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。 * * 示例: * * 输入:n = 4, k = 2 * 输出: * [ * [2,4], * [3,4], * [2,3], * [1,2], * [1,3], * [1,4], * ] * * 来源:力扣(LeetCode) * 链接:https://leetcode-cn.com/problems/combinations * 著作权归领扣网络所..

2021-06-03 20:27:27 54

原创 LeetCode79. 单词搜索

class Solution {public: bool exist(vector<vector<char>> &board, string word) { this->row = board.size(); this->col = board[0].size(); this->word = word; for (int i = 0; i < row; i++) { .

2021-06-01 20:49:18 112

原创 LeetCode162. 寻找峰值

/** * 峰值元素是指其值大于左右相邻值的元素。 * * 给你一个输入数组nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。 * * 你可以假设nums[-1] = nums[n] = -∞ 。 * * * * 示例 1: * * 输入:nums = [1,2,3,1] * 输出:2 * 解释:3 是峰值元素,你的函数应该返回其索引 2。 * 示例2: * * 输入:nums = [1,2,1,...

2021-05-29 16:13:09 96

原创 LeetCode1011. 在 D 天内送达包裹的能力

/** * 传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。 * * 传送带上的第 i个包裹的重量为weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。 * * 返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。 * * * * 示例 1: * * 输入:weights = [1,2,3,4,5,6,7,8,9,10], D = 5 * 输出:15 * 解释: * 船舶最低载重...

2021-05-28 22:21:30 64

原创 LeetCode1094. 拼车

/** * 假设你是一位顺风车司机,车上最初有capacity个空座位可以用来载客。由于道路的限制,车只能向一个方向行驶(也就是说,不允许掉头或改变方向,你可以将其想象为一个向量)。 * * 这儿有一份乘客行程计划表trips[][],其中trips[i] = [num_passengers, start_location, end_location]包含了第 i 组乘客的行程信息: * * 必须接送的乘客数量; * 乘客的上车地点; * 以及乘客的下车地点。 * 这些给...

2021-05-27 21:30:49 160

原创 LeetCode524. 通过删除字母匹配到字典里最长单词

/** * 给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。 * * 示例 1: * * 输入: * s = "abpcplea", d = ["ale","apple","monkey","plea"] * * 输出: * "apple" * 示例2: * * 输入: * s = "abpcplea", d = ["a","..

2021-05-23 17:13:34 61

原创 LeetCode148. 排序链表

/* * 给你链表的头结点head,请将其按 升序 排列并返回 排序后的链表 。 * * 进阶: * * 你可以在O(nlogn) 时间复杂度和常数级空间复杂度下,对链表进行排序吗? * * * 示例 1: * * * 输入:head = [4,2,1,3] * 输出:[1,2,3,4] * 示例 2: * * * 输入:head = [-1,5,3,4,0] * 输出:[-1,0,3,4,5] * 示例 3: * * 输入:head ...

2021-05-23 16:31:06 42

原创 LeetCode962. 最大宽度坡

/** * 给定一个整数数组A,坡是元组(i, j),其中i < j且A[i] <= A[j]。这样的坡的宽度为j - i。 * * 找出A中的坡的最大宽度,如果不存在,返回 0 。 * * * * 示例 1: * * 输入:[6,0,8,2,1,5] * 输出:4 * 解释: * 最大宽度的坡为 (i, j) = (1, 5): A[1] = 0 且 A[5] = 5. * 示例 2: * * 输入:[9,8,1,0,1,9,4,...

2021-05-20 22:58:30 105

原创 LeetCode452. 用最少数量的箭引爆气球

/** * 在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。 * * 一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所...

2021-05-19 21:43:40 56

原创 LeetCode435. 无重叠区间

/** * 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。 * * 注意: * * 可以认为区间的终点总是大于它的起点。 * 区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。 * 示例 1: * * 输入: [ [1,2], [2,3], [3,4], [1,3] ] * * 输出: 1 * * 解释: 移除 [1,3] 后,剩下的区间没有重叠。 * 示例 2: * * 输入: [ [1,2], [1,2], [1,2] ] *.

2021-05-19 21:32:07 39

原创 LeetCode45. 跳跃游戏 II

/** * 45. 跳跃游戏 II * 给定一个非负整数数组,你最初位于数组的第一个位置。 * * 数组中的每个元素代表你在该位置可以跳跃的最大长度。 * * 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 * * 假设你总是可以到达数组的最后一个位置。 * * * * 示例 1: * * 输入: [2,3,1,1,4] * 输出: 2 * 解释: 跳到最后一个位置的最小跳跃数是 2。 * 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到.

2021-05-18 21:00:49 85 1

原创 LeetCode55. 跳跃游戏

/** * 给定一个非负整数数组nums ,你最初位于数组的 第一个下标 。 * * 数组中的每个元素代表你在该位置可以跳跃的最大长度。 * * 判断你是否能够到达最后一个下标。 * * * * 示例1: * * 输入:nums = [2,3,1,1,4] * 输出:true * 解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。 * 示例2: * * 输入:nums = [3,2,1,0,4] * 输出:fals...

2021-05-14 17:57:16 258

原创 LeetCode406. 根据身高重建队列

/** * 假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。 * * 请你重新构造并返回输入数组people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。 * * * * 示例...

2021-05-14 17:43:53 218

原创 LeetCode673. 最长递增子序列的个数

/** * 给定一个未排序的整数数组,找到最长递增子序列的个数。 * * 示例 1: * * 输入: [1,3,5,4,7] * 输出: 2 * 解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。 * 示例 2: * * 输入: [2,2,2,2,2] * 输出: 5 * 解释: 最长递增子序列的长度是1,并且存在5个子序列的长度为1,因此输出5。 * 注意:给定的数组长度不超过 2000 并且结果一定是32位有符号整数。 * ..

2021-05-11 22:48:11 70

原创 LeetCode139. 单词拆分

/** * 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定s 是否可以被空格拆分为一个或多个在字典中出现的单词。 * * 说明: * * 拆分时可以重复使用字典中的单词。 * 你可以假设字典中没有重复的单词。 * 示例 1: * * 输入: s = "leetcode", wordDict = ["leet", "code"] * 输出: true * 解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。 * ..

2021-05-10 14:59:29 46

原创 LeetCode130. 被围绕的区域

/* * 给你一个 m x n 的矩阵 board ,由若干字符 'X' 和 'O' ,找到所有被 'X' 围绕的区域,并将这些区域里所有的'O' 用 'X' 填充。 * * * 示例 1: * * * 输入:board = [["X","X","X","X"],["X","O","O","X"],["X","X","O","X"],["X","O","X","X"]] * 输出:[["X","X","X","X"],["X","X","X","X"],["X","X","X"...

2021-05-08 16:52:20 57

原创 LeetCode113. 路径总和 II

/** * 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 * * 叶子节点 是指没有子节点的节点。 * * * * 示例 1: * * * 输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22 * 输出:[[5,4,11,2],[5,8,4,5]] * 示例 2: * * * 输入:root = [..

2021-05-07 00:18:29 58

原创 LeetCode841.钥匙和房间

/* * 有 N 个房间,开始时你位于 0 号房间。每个房间有不同的号码:0,1,2,...,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。 * * 在形式上,对于每个房间 i 都有一个钥匙列表 rooms[i],每个钥匙 rooms[i][j] 由 [0,1,...,N-1] 中的一个整数表示,其中 N = rooms.length。 钥匙 rooms[i][j] = v 可以打开编号为 v 的房间。 * * 最初,除 0 号房间外的其余所有房间都被锁住。 * * 你可以自由.

2021-05-06 23:39:49 69

原创 LeetCode529. 扫雷游戏

/* * 让我们一起来玩扫雷游戏! * * 给定一个代表游戏板的二维字符矩阵。'M'代表一个未挖出的地雷,'E'代表一个未挖出的空方块,'B'代表没有相邻(上,下,左,右,和所有4个对角线)地雷的已挖出的空白方块,数字('1' 到 '8')表示有多少地雷与这块已挖出的方块相邻,'X'则表示一个已挖出的地雷。 * * 现在给出在所有未挖出的方块中('M'或者'E')的下一个点击位置(行和列索引),根据以下规则,返回相应位置被点击后对应的面板: * * 如果一个地雷('M')被挖...

2021-04-27 23:21:57 79

原创 LeetCode210. 课程表 II

解题方法与 LeetCode207 相同DFS方法/* * 现在你总共有 n 门课需要选,记为0到n-1。 * * 在选修某些课程之前需要一些先修课程。例如,想要学习课程 0 ,你需要先完成课程1 ,我们用一个匹配来表示他们: [0,1] * * 给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。 * * 可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。 * * 示例1: * * 输入: 2...

2021-04-25 21:02:11 59

原创 LeetCode207. 课程表

BFS方法/* * 你这个学期必须选修 numCourses 门课程,记为0到numCourses - 1 。 * * 在选修某些课程之前需要一些先修课程。 先修课程按数组prerequisites 给出,其中prerequisites[i] = [ai, bi] * ,表示如果要学习课程ai 则 必须 先学习课程 bi 。 * * 例如,先修课程对[0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。 * 请你判断是否可能完成所有课程的学习?如果可以,返回 t...

2021-04-25 20:52:43 79

原创 LeetCode103. 二叉树的锯齿形层序遍历

/* * 给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 * * 例如: * 给定二叉树[3,9,20,null,null,15,7], * * 3 * / \ * 9 20 * / \ * 15 7 * 返回锯齿形层序遍历如下: * * [ * [3], * [20,9], * [15,7] * ] * * 来源:力扣(LeetCo..

2021-04-25 17:00:19 50

原创 LeetCode468. 验证IP地址

/** * 编写一个函数来验证输入的字符串是否是有效的 IPv4 或IPv6 地址。 * * 如果是有效的 IPv4 地址,返回 "IPv4" ; * 如果是有效的 IPv6 地址,返回 "IPv6" ; * 如果不是上述类型的 IP 地址,返回 "Neither" 。 * IPv4地址由十进制数和点来表示,每个地址包含 4 个十进制数,其范围为0 -255,用(".")分割。比如,172.16.254.1; * * 同时,IPv4 地址内的数不会以 0 开头。比如,地址1...

2021-04-20 21:19:01 80

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

/** * 给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1,col1) ,右下角为 (row2,col2) 。 * 上图子矩阵左上角(row1, col1) = (2, 1),右下角(row2, col2) = (4, 3),该子矩形内元素的总和为 8。 * 示例: * * 给定 matrix = [ * [3, 0, 1, 4, 2], * [5, 6, 3, 2, 1], * [1, 2, 0, 1, 5], * [4, 1,...

2021-04-20 21:09:34 58

空空如也

空空如也

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

TA关注的人

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