- 博客(76)
- 资源 (1)
- 问答 (4)
- 收藏
- 关注
原创 LeetCode[105] 从前序与中序遍历序列构造二叉树
解法2:从注释中应该可以看出来我调试了多少次*_*,思路没打开,主要是进行了vector的拷贝,导致内存占用很大,边界问题也没有搞的很清楚,导致有不少if判断,注释打开的话submit会超时超内存,关闭注释就可通过。,请构造二叉树并返回其根节点。
2024-01-11 15:29:32 561
原创 LeetCode [103] 二叉树的锯齿形层序遍历
ps:刚开始,还在想使用stack,但是发现stack只能压到栈顶,还得需要一个vec辅助进行,难搞,还是算法库好哇!(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
2024-01-10 16:40:36 513
原创 LeetCode[62] 不同路径
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。网格的左上角 (起始点在下图中标记为 “Start” )。问总共有多少条不同的路径?
2024-01-05 16:58:19 544
原创 LeetCode[53]最大子数组和
这里有个关键状态转移方程的定义,dp[i] = max(nums[i], nums[i]+dp[i-1],在这道题里了解到了算法里的无后效性,dp[i]表示以nums中第i个元素结尾的和最大的字符串,所以dp[i]分为两种情况,一种是nums[i]单独一个元素成为字符串,或者加上前边的第[i-1]个元素形成的字符串,即nums[i]+dp[i-1],两者中取最大的即为dp[i]=max(nums[i], nums[i]+dp[i-1])是数组中的一个连续部分。
2024-01-05 10:42:09 504
原创 LeetCode[27]移除元素
#include<stdio.h>#include<stdbool.h>#include<string.h>bool isMatch(char * s, char * p){ if(s == NULL || p == NULL) return false; int i = 0; int j = 0; char c1,c2; int len = strlen(s); while(s[i] != '\0...
2024-01-04 11:04:50 471 1
原创 LeetCode[141] [142] 环形链表I II
对于142需要环的起点,需要找出其中规律,动手画一下,当slow与fast相等的时候,假设slow从head开始走了k步,那么此时fast走了2k步,fast多走的k步是链表环的大小,假设相遇时,环起点与相遇点的距离为n,则head距离环启动的距离为k-n,slow继续往前走,距离环起点的距离也为k-n,所以此时任意一个指针从head开始,每次前进一步,刚好在环起点与slow相遇。从head开始,一个快指针,一次前进两步,一个慢指针,一次走一步。如果没有环,则快指针首先到达链表尾部,
2023-12-27 16:51:44 449
原创 logrotate执行定时执行不生效,踩坑
正常情况回滚压缩都没有问题,但是作为生产环境,偶尔系统会出现故障,要排查某个历史时间点的系统状况,需要解压之前日志,很多时候会直接在/var/log/下直接解压然后查看日志内容。在定时任务中添加一个动作,每次执行回滚任务之前,把所有要回滚的日志文件检查一遍,如果有某个日志文件的*.1存在,就压缩为原来的状态,为了尽量保存日志的完整,把其他解压的后续文件也都压缩为原来的状态*.[序号].gz,保持日志文件的连续性。logrotate是系统自带的日志回滚模块,默认情况配置情况下,没发现什么问题。
2023-11-20 15:35:25 739
原创 LeetCode [23] 合并K个有序链表
前有合并两个有序链表,感觉比较简单,没有认为合并K个升序链表难,其实直观上算法都是比较简单:首先对比每一个链表头部元素,找出最小的,放在目标链表中,更新这个链表头,直到遍历所有链表。主要是一些细节处理上。
2023-08-01 11:29:17 257
原创 C++学习
一、类 C++允许在类里声明常量,但不允许对它进行初始化 class Car{public: const float TANKSIZE = 85;//报错}; 绕开这限制的方法就是创建一个静态常量 class Car{public: static const float TANKSIZE = 85;//报错}; 类的相互赋值 Car car1, car2;...car2 = car1;//默认构造函数? 构造器和通用方法的区别
2023-07-25 16:51:19 107
原创 LeetCode[111] 二叉树的最小深度
类似二叉树的最大深度,最大深度是自顶向下一直遍历,直到找到最底部的节点。最小深度是遍历,找到最近的叶子节点即可。
2023-07-21 14:50:09 95
原创 LeetCode [988] 从叶结点开始的最小字符串
其实不用把每一次都记下来,再循环比对,维护一个返回的string,遇到节点比对就好了。把所有的路径遍历一下,记录下来,然后比对string。
2022-07-22 15:26:48 185
原创 LeetCode [96] 不同的二叉搜索树
我是先刷了【95】不同的二叉搜索树(4个小时+才ac,我是不是废了),然而96题更简单,只需要不同二叉树的总个数就行,95需要把所有的二叉树都列出来。所以第一种做法就是把95的思路拿过来了。
2022-07-21 16:33:51 1282
原创 pixman安装
问题:源码qemu安装的时候,pixman没有安装,Dependency "pixman-1" not found, tried pkgconfig,记录一下安装的坑。内网环境,无法yum安装pixman,下载了pixman的源码包,解压之后没有configure文件./autogen.sh autoreconf: command not foundyum -y install autoconf automake libtool,可解决上述问题再次./autogen.sh,在源码下找确实没有这个文件,但是c
2022-06-14 09:58:43 2765
原创 shell脚本中while : 相当于while true
可以一直循环step=10while :do off=0 while [ $off -lt 100 ] do echo $off off=$[$off+$step] sleep 1 donedone输出如下,一直循环下去,相当于while true010203040506070809001020304
2022-05-10 10:34:59 788
原创 LeetCode 146 LRU算法-hash+双链表、unorder_map
第二种解法:利用unordered_map本身进行匹配,实验表明,unordered_map是头插法,并且没有rbegin()迭代器,使用end()达不到想要的效果,所以每次删除数据冷的结点,需要遍历整个hash表,到第17个case通过不了。第一种解法:hash+双向链表。
2022-01-08 23:33:43 292
原创 快排qsort
void swap(int a[], int i, int j){ if(i >= j) return; int tmp = a[i]; a[i] = a[j]; a[j] = tmp; return;}void qsort(int a[], int low, int high){ if(low >= high) return; int pos; int p = a[low]; int i = low; int .
2021-12-27 23:20:31 241
转载 反转链表-三个指针
struct node* reverse_linklist(struct node*head){ if(head == NULL || head->next == NULL) return head; struct node* beg = NULL; struct node* mid = head; struct node* end = head->next; while(1) { mid...
2021-12-27 16:45:56 157
原创 二叉树实现
#include<stdio.h>#include<stdlib.h>#define NAMESIZE 32struct score_st{ int id; char name[NAMESIZE]; int math; int chinese;};struct node_st{ struct score_st data; struct node_st *l,*r;};void print_s(struct s...
2021-12-13 20:51:26 3612
原创 荣耀机试题2
#include<stdio.h>#include<stdlib.h>#include<string.h>#define fnum 20 //水果种类struct s{ char f[32]; int w[101];};void sort(int a[], int people){ int i,j; for(i = 0; i < people; i++) for(j = i...
2021-12-12 21:16:10 872
原创 算法宝藏链接
第一章 序章 | LeetCode Cookbook --go语言leetcode实现的算法自学编程一路走来,这些私藏工具和网站我全贡献出来了!
2021-11-26 16:50:13 58
原创 有限状态机编程
头文件relay.h#ifndef _RELAY__H_#define _RELAY__H_#include <stdlib.h>#define JOBMAX 10000enum { STATE_RUNNING = 1, STATE_CANCELD, STATE_OVER};struct relay_stat_st{ int state; int fd1; int fd2; int64_t count12, count21;};// retrurn
2021-11-07 23:44:17 258
原创 pthread学习--使用条件变量实现信号量
在实际开发过程,可能会控制某个模块所使用的资源,同一时刻只允许某个功能使用一定数量的资源。同样是筛质数,同一时刻只允许同时四个线程进行计算,所以需要使用一个信号量进行总资源的控制,代码如下://mysem.h#ifndef _MYSEM_H__#define _MYSEM_H__#include <pthread.h>//extern struct mysem;struct mysem { int val; pthread_mutex_t mutex;
2021-11-05 15:19:49 322
原创 线程学习--pthread--锁链及条件变量
pthread_cond_wait函数的使用,一般跟lock一起用pthread_mutex_lock(&mutex);pthread_cond_wait(&cond,&mutex);等待条件变量满足; 把获得的锁释放掉;(注意:1,2两步是一个原子操作) 当然如果条件满足了,那么就不需要释放锁。所以释放锁这一步和等待条件满足一定是一起执行(指原子操作)。--很重要。 pthread_cond_wait()被唤醒时,它解除阻塞,并且尝试获取锁(不一定拿到锁)。因此,一
2021-11-05 14:43:02 408
原创 线程学习--pthread-筛质数
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/wait.h>#include <pthread.h>#define LEFT 40000000#define RIGHT 40000200void *primer(void *arg){ int i = (int)arg.
2021-10-27 20:57:44 247
原创 mydeamon--守护进程实例
#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>static int deamonize(void){ pid_t pid = fork(); if(pid < 0) { perror("fork()"); exi.
2021-10-26 22:33:23 156
原创 mysudo--Linux用户权限管理实现
一直对Linux中的u+s权限不是很理解,一起来看看setuid的使用任何用户执行时,都以setuid程序文件所属的用户的身份运行。一般使用场景是,对归属root的程序进行setuid,以便普通用户有root用户的权限。上代码:#include <stdio.h>#include <stdlib.h>#include <wait.h>#include <unistd.h>#include <sys/types.h>in
2021-10-26 17:24:59 209
原创 execvp使用--实现自己的shell
#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/wait.h>#include <unistd.h>#include <string.h>#include <glob.h>static int parse(char *linebuf, glob_t *glob_res){ char *tok = "a.
2021-10-21 22:04:12 578
原创 fork进程--再次理解全缓冲和行缓冲模式
一个简单的多进程例子:#include <stdio.h>#include <unistd.h>#include <stdlib.h>int main(){ pid_t pid; printf("%d:Parent Begin!\n",getpid()); pid = fork(); if(pid < 0) { perror("fork()"); exit(1); }
2021-10-15 14:24:03 177
NFSv3 1813翻译版
2020-11-02
lscpu与cat /proc/cpuinfo输出不一致
2023-12-11
关于vector中迭代器出现段错误
2021-12-30
多线程随机性死锁问题
2021-11-04
VScode单步调试不能用
2021-08-18
关于Linux线程之间锁的问题
2021-08-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人