自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode——【课程表III】

两个原则,deadline小的优先;持续时间短的课程优先;具体细节:按照deadline排序,维护一个大顶堆,对截止时间早的优先入队,当入队元素无法入队时,尝试观察队顶持续时间最长的元素是否比当前元素长,如是的话,进行替换。...

2022-08-09 13:32:36 1306 1

原创 leetcode——【裁剪数字后查询第k小的数字】

代码】leetcode——【裁剪数字后查询第k小的数字】

2022-07-25 23:46:32 175

原创 leetcode——【开灯泡】

代码】leetcode——【开灯泡】

2022-07-17 14:32:10 1197

原创 leetcode——【第k个最大元素】

快速排序的变种堆排序

2022-06-29 12:37:15 1493

原创 leetcode——【自定义rand()生成】

自定义rand()生成

2022-06-24 22:17:39 957

原创 leetcode——【差分数组】

当我们需要对原数组的不同区间施加不同的增量,我们只要按规则修改差分数组即可。对于区间改变问题,可采用此种方法,对区间起始位置采用加操作,区间结束位置+1采用减操作。日程安排表问题思路因为此处时间跨度较大,采用map的结构维护差分数组(因为其对key自动排序的缘故),在维护差分数组后并进行遍历比较一次,得到此刻最大的预定次数。先去试着添加,然后检查添加后是否符合要求,若不符合,退回添加。采用上述方法或者使用map构建,lower_bound进行快速的二分查找。使数组互补最少的操作次数

2022-06-15 18:23:08 1225

原创 STL——【lower_bound和upper_bound】

lower_bound是找出第一个不满足比较函数的关系的迭代器,而upper_bound找出第一个满足比较函数关系的迭代器。

2022-06-14 22:20:38 421

原创 leetcode——【升序砍树】

题目思路直接BFS——按照树高排序,转换成多个最短路径叠加问题,其中引入visited数组,保存已经访问过的节点。Dijkstra算法——在BFS时候,引入优先队列,优先队列维护已用步数最少的路径方法。A* 启发式搜索算法——在BFS时候,维护剩余曼哈顿距离最小的点,得到最终结果。实现直接BFSclass Solution {public: int len_m; int len_n; vector<vector<int>> edges

2022-05-26 14:38:58 364

原创 leetcode——【最小、大堆实现】

概念堆是一种数据结构,就是每个节点根据某种规则排序, 从根节点往下都符合某种规律,根节点的值比所有节点的值都大, 称为最大堆;根节点的值比所有节点的值都小, 称为最小堆。思路实现class Solution {public: void adjust_heap(vector<int>& nums, int father, int len) { int left = 2 * father + 1; int right = 2 * fathe

2022-05-23 16:33:55 233

原创 c++——【迭代器】

概念迭代器是一种检查容器内元素并遍历元素的数据类型,通常用于对C++中各种容器内元素的访问,但不同的容器有不同的迭代器,可以将迭代器理解为指针。迭代器类型输入迭代器 (input iterator)输出迭代器 (output iterator)前向迭代器 (forward iterator)双向迭代器 (bidirectional iterator)随机访问迭代器( random-access iterator)迭代器通用功能比较两个迭代器是否相等(==、!=)。前置和后置递增运算

2022-05-16 17:40:27 471

原创 leetcode——【重载排序】

关注stable_sort用法class Solution {public: vector<string> reorderLogFiles(vector<string>& logs) { stable_sort(logs.begin(), logs.end(), [&](const string& a, const string& b) { int pos1 = a.find_first_of(".

2022-05-16 13:43:22 129

原创 技术问题汇总

内存分配方式&&栈和堆的区别栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。其与数据结构中的堆不同,分配方式类似于链表。全局/静态区(static):全局变量和静态变量的存储是放在一块的,在程序编译时分配。文字常量区: 存放常量字符串。程序代码区:存放函数体(类的成员函数、全局函数)的二进制代码。int a = 0; //全局初始化区

2022-04-28 23:15:18 111

原创 【咳嗽检测nano部署】

镜像烧录1.下载Etche2. 选择内存卡,烧录镜像(镜像地址)3. 内存卡插入nano板子,进行初始化设置环境部署linux启动终端出现To run a command as administrator:touch ~/.sudo_as_admin_successful安装python3.7.5开发板连接网络后,打开命令行sudo apt-get install python3.7输入python3.7,可进入python3.7.5则安装成功sudo apt-get insta

2022-04-26 21:16:03 533

原创 leetcode——【随机翻转矩阵】

题目思路因为矩阵的大小为mxn,m和n都很大,所以不可能应用空间复杂度O(mxn)的数据结构去处理。并且在随机过程中要尽量少调用rand函数,因此可采用降维二维数组和哈希表映射来解决这个问题,首先将二维数组进行降维,然后引入哈希表,出事状态下可随机的个数total=mxn,每进行一次随机,便减少随机个数,得到的随机数作为key在哈希表中搜索,若不存在,即表明此随机数在之前从未得到过,便输出此随机数对应的位置,并且将此数在哈希表中的值设置为后续不可能随机到的值,即total或者total为key对应的值

2022-04-12 14:48:46 139

原创 【leetcode】——线段树

线段树思路实现class NumArray {private: vector<int> segmentTree; int n; void build(int node, int s, int e, vector<int> &nums) { if (s == e) { segmentTree[node] = nums[s]; return; }

2022-04-06 17:15:43 126

原创 【linux】-信号量、互斥锁、条件变量

信号量class sem{public: sem() { if (sem_init(&m_sem, 0, 0) != 0) { throw std::exception(); } } sem(int num) { if (sem_init(&m_sem, 0, num) != 0) { throw std::except

2022-03-24 14:20:58 85

原创 linux随笔

linux信号函数signal(SIGCHLD, SIG_IGN)我们调用fork函数派生一个子进程后,当子进程快要结束,会向父进程发送一个SIGCHLD信号,告诉父进程我快结束,赶快调用wait函数,来回收子进程的退出状态和其他信息。这就是一种我们通常来预发僵尸进程产出的方法,在父进程接收到SIGCHLD信号后,将默认行为改为wait来回收子进程的信息。如果父进程没有调用wait函数,子进程先于父进程退出,则子进程将成为僵尸进程。但是wait函数需要阻塞父进程直到子进程结束为止,对于并发要求较高的并

2022-03-11 22:45:54 155

原创 linux系统编程及基本命令

liunx启动BIOS -> MBR (主引导纪录) -> 引导加载程序 -> 内核 -> init process -> login进程退出方式及区别不管哪种退出方式,系统最终都会执行内核的同一代码,这段代码用来关闭进程打开的文件描述符,释放它占用的内存和其他资源。退出正常退出main函数调用return调用exit()函数调用_exit()函数异常退出调用abort()函数进程收到某个信号,该信号使程序终止已结束进程的状态sh

2022-03-09 23:49:07 315

原创 leetcode——【不用加减乘除做加法】

题目思路实现class Solution {public: int add(int a, int b) { while(b != 0){ int c = (a & b) << 1; a ^= b; b = c; } return a; }};class Solution { public int add(int a, int b) { if (b == 0) { return

2022-03-02 16:32:18 120

原创 leetcode——【KMP匹配】

题目KMP匹配思路实现class Solution {public: int strStr(string haystack, string needle) { int len_ss = haystack.size(); int len_pp = needle.size(); if (len_pp == 0) return 0; vector<int> next(len_pp);

2022-02-23 21:15:31 7910

原创 leetcode——【课程表II】

题目思路记忆化搜索+DFS对于每个查询数组,我们可以利用dfs进行求解。对[first, second]而言,我们要确定其是否有关联,可以first开始递归,寻找到second结尾则可得到其关联关系。建立关联数组visted,初始化为0,表示为探索过;若为1,表示两者有关联;若为-1表示两者没有关联。dfs设计:当数组值为1时,输出true;值为-1,输出false;若为0,遍历子节点,对子节点dfs,若结果为true,改变数组值为1,并输出true;若子节点结果均为false,则设置数组值为-1

2022-02-22 21:33:57 102

原创 leetcode——【课程表】

题目思路拓扑排序问题给定一个包含 nn 个节点的有向图 GG,我们给出它的节点编号的一种排列,如果满足:对于图 GG 中的任意一条有向边 (u, v)(u,v),u 在排列中都出现在 v 的前面。此问题可转换为:求解该图的拓扑排序。DFS设置visited数组,0代表未访问过,1代表正在访问但是还未回溯到该点,-1代表访问结束。遍历所有点,如果未访问过,则以该点进行DFS。如果此点已经访问结束,直接返回;如果此点正在访问还未回溯,设置失败跳出;如果此点未访问过,设置状态为正在访问还未回溯,遍

2022-02-21 23:28:07 175

原创 leetcode——【接雨水问题】

题目思路动态规划每一个位置能够达到的最大高度等于两边最大高度的最小值,则可以通过动态规划得到每个位置两边的最大值,然后求得结果。单调栈将每个pos依次进栈,当待进栈元素大于栈顶元素并且栈不为空是时,出栈并计算当前情况的得到的雨水值。双指针设置left_max和right_max,left和right,如果left_max大的话,移动right,每步移动计算每步雨水值;反之left移动,同样每步移动计算每步的雨水值。实现动态规划class Solution {public: i

2022-02-21 11:12:48 7522

原创 leetcode——【蔡锷公式】

题目给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。输入为三个整数:day、month 和 year,分别表示日、月、年。您返回的结果必须是这几个值中的一个 {“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”}。示例 1:输入:day = 31, month = 8, year = 2019输出:“Saturday”示例 2:输入:day = 18, month = 7, ye

2022-02-19 20:29:41 122

原创 leetcode——【合并K个排序链表】

合并k个排序链表合并两个ListNode* mergeTwoLists(ListNode *a, ListNode *b) { if ((!a) || (!b)) return a ? a : b; ListNode head, *tail = &head, *aPtr = a, *bPtr = b; while (aPtr && bPtr) { if (aPtr->val < bPtr->val) {

2022-02-19 12:34:01 90

原创 【c++】——int和unsigned int右移问题

c++int类型和unsigned int右移逻辑左移和算术左移:均是在右边补0,左移1位,相当于原数乘2;算术右移:左边补充符号位(与原符号位相同),右移1位,相当于原数除2;逻辑右移:右移后,左边补0;c++中位移动的情况对于无符号数,可认为是逻辑左移和逻辑右移;对于有符号数,可认为是算术左移和算术右移;要对一个有符号数执行逻辑右移,可以先将它强制类型转换为无符号类型;要对一个无符号数执行算术右移 ,可以先将它强制类型转换为有符号类型。...

2022-02-18 23:13:29 2134

原创 leetcode——【前导0和二进制1个数】

前导0和二进制1个数 int length(int num) { int ret = 0; if (num >> 16 == 0) { ret += 16; num <<= 16; } if (num >> 24 == 0) { ret += 8; num <<= 8; }

2022-02-12 03:55:33 6105

原创 leetcode-【最大公约数】

判断为最简分数&&求最大公约数的两种算法:1.辗转求余2.站桩相减3.穷举 bool simpliJudge(int i, int j) { int z = j; while (i % j) { z = i % j; i = j; j = z; } if (z == 1) return true; els

2022-02-11 08:02:47 823

原创 leetcode——【石子游戏IV(博弈类)】

题目思路石头可简化为价值为0,1, 2的情况,对于价值为0的石头,可做如下简化:1. 如果0的个数为偶数,等于价值0个数为0的情况;2. 如果0的个数为奇数,等于价值0个数为1的情况。对于价值为1和2的石头,可以简化为两种情况:1. A首先移除了1,那么B只能移除1,之后A只能移除2,B只能移除1;2. A首先移除了2,那么B只能移除2,之后A只能移除1,B只能移除2。因此可以得到算法策略:如果第一种情况,A获胜:1恰好有一个,2至少有一个;1至少有两个,并且小于等于2的个数;即

2022-01-26 16:54:56 2522

原创 leetcode——【猫和老鼠】

题目思路博弈问题这道题是博弈问题,猫和老鼠都按照最优策略参与游戏。在阐述具体解法之前,首先介绍博弈问题中的三个概念:必胜状态、必败状态与必和状态。对于特定状态,如果游戏已经结束,则根据结束时的状态决定必胜状态、必败状态与必和状态。如果分出胜负,则该特定状态对于获胜方为必胜状态,对于落败方为必败状态。如果是平局,则该特定状态对于双方都为必和状态。从特定状态开始,如果存在一种操作将状态变成必败状态,则当前玩家可以选择该操作,将必败状态留给对方玩家,因此该特定状态对于当前玩家为必胜状态。从特定

2022-01-26 15:55:30 299

原创 leetcode——【格雷码】

题目格雷码和二进制转换实现思路格雷码到二进制二进制到格雷码实现格雷码到二进制二进制到格雷码

2022-01-20 17:14:06 59

原创 leetcode——【快速幂算法】

题目快速幂实现思路递归循环实现int qpow(int a, int n){ if (n == 0) return 1; else if (n % 2 == 1) return qpow(a, n - 1) * a; else { int temp = qpow(a, n / 2); return temp * temp; }}//非递归快速幂int qpow(int a, in

2022-01-19 20:17:19 2138

原创 leetcode——【逃离大迷宫】

题目思路方法一:有限步数的BFS对于空间中一点,n个障碍点在最理想的情况下最多可包围n(n-1)/2个点,因此可得到思路:1.对起点进行广度优先搜索,在n(n-1)/2点内找到了终点,则返回true;若遍历的点小于n(n-1)/2,则返回false;若在n(n-1)/2点内未找到终点,进行下一步;2.对终点进行广度优先搜索,在n(n-1)/2点内找到了起点,则返回true;若遍历的点小于n(n-1)/2,则返回false;若在n(n-1)/2点内未找到起点,返回true。方法二:离散化+BFS

2022-01-12 19:14:19 184

原创 leetcode——【pair<>hash实现】

auto hash_fn = [fn = hash<long long>()](const pair<int, int>& o)->size_t { auto& x = o; return fn((long long)x.first << 20 | x.second); };

2022-01-12 14:03:43 460

原创 leetcode——【第k个最小的素数分数】

题目思路长度为n的数组,会有n(n-1)/2个不同的分数,其中可分为n-1组,其长度为1, 2, 3, 4, 5…n的每组均有明确的大小关系,即其可分为n-1组有序列表,问题便简化为n-1个有序列表的合并问题。暴力排序将n(n-1)/2个分数都存入数组,然后利用sort函数并自定义其排序的函数,得到排序后的结果,然后输出第k个即完成。class Solution {public: vector<int> kthSmallestPrimeFraction(vector<

2021-12-10 15:23:59 378

原创 c++操作笔记

迭代器向前:advance(iter, 3);迭代器距离:distance(iter1, iter2)重载priority_queue比较结构体:priority_queue < ListNode*, vector<ListNode*>, cmp> queue;struct cmp { bool operator ()(const ListNode* a, const ListNode* b) { return a->val

2021-12-10 00:55:43 400

原创 leetcode——【三个无重叠子数组的最大和】

题目思路1.暴力遍历首先求得位置poi的k项和数组,数组长度为nums的length-k+1 sum_arr[0] = accumulate(nums.begin(), nums.begin() + k, 0); for (int i = 1; i < sum_arr.size(); ++i) sum_arr[i] = sum_arr[i - 1] - nums[i - 1] + nums[i + k - 1];然后进行三层遍历,第n层遍历第n/3个子数组的起始位置,暴力遍历

2021-12-08 21:01:18 3448

原创 leetcode——【k次取反后最大化数组和】

题目思路贪心算法:策略为负数尽可能改为正数,当负数全部更改完仍有取反次数没有用完,这时不得不把正数改回去,值得注意的是,选择最小的正数进行修改时,前面取反得到的正数仍然参与选择。首先进行排序,以k为界限,从小到大进行负转正,若负数用完后k值仍大于0且为奇数,意味着必须有一个非负数进行一次转换或者将一个由负数转换而成的正数转换回去。排序因为其范围较小,可采用哈希表统计个数,遍历数字范围代替排序。或者采用小堆优先队列直接完成。算法实现class Solution {public: int la

2021-12-08 11:41:34 336

原创 leetcode——【超级次方】

题目思路快速幂算法:倒序遍历:秦九韶法:算法实现class Solution { const int MOD = 1337; int pow(int x, int n) { int res = 1; while (n) { if (n % 2) { res = (long) res * x % MOD; } x = (long) x *

2021-12-07 16:09:16 55

原创 【docker + wordpress部署个人博客】

1. 下载docker镜像docker pull wordpressdocker pull mysql:5.6查看镜像列表docker image ls2. 生成容器开启mysql容器,密码设置为123456:docker run --name w-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6然后进入mysql容器创建个wordpress的数据库:docker exec -it wordpress-mysql mysql -uro

2021-12-06 15:13:32 823

空空如也

空空如也

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

TA关注的人

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