- 博客(256)
- 收藏
- 关注
原创 服务器被黑记录-问题、探索与检测
问题发现:系统出现了个挖矿的docker容器,删除了但忽略了(根源在此,docker容器的远程端口没有认证,出现了问题)执行sudo或htop命令输出奇怪字符执行touch等创建文件命令,生成的文件读写权限很奇怪问题探索:开始以为是sudo、bash或htop的问题使用strace跟踪调用发现了奇怪的write(1, "\210$\255\373", 4)查看htop、sudo等对应版本源码,发现可能是某些系统lib的问题意识到是共享库出问题了然后发现用touch后其他创建的文
2021-01-30 13:27:20
246
原创 LeetCode 239 Sliding Window Maximum
LeetCode 239 Sliding Window Maximum思路相当有趣的一道题,除了暴力外有三种解法有序集合使用multiset,初始化前k个数,然后每次查找-删除-添加-取最大值即可。C++里set multiset是有序的,虽然不支持随机访问,但是指定greater模板参数后就可以直接使用*set.begin()获得最大值了。双端队列维护一个双端队列,该队列总是保持如下特性队列中任一位置前的元素总比该位置的大队列最前端元素是最大值队列最大为k上述特性能够保证在O(1)
2021-01-12 15:56:52
229
原创 LeetCode 295 Find Median from Data Stream
思路使用multiset+pointer,在向multiset插入数据同时更新pointer,确保pointer总是指向中位数或者第一个中位数如果数据个数是偶数个。set,multiset,map的迭代器在插入操作后仍然有效。代码class MedianFinder { multiset<int> data; multiset<int>::iterator mid;public: MedianFinder() {} void addNum(i
2021-01-07 10:20:57
216
原创 LeetCode 42 Trapping Rain Water
思路很直观的解法是不断找凹形区域然后计算,这个思路可以延伸为阶段式的,使用最大高度的柱子将数组划分为三个部分,左边从左到右、右边的从右到左不断找比当前元素大的然后计算所覆盖区域的值,最大柱子之间的直接计算,这样子需要两三次遍历,但可以更高效。考虑上面所说的从左到右寻找比当前元素大的计算,这样的区域其能容纳的水量一定是其中左边的柱子高度减去中间每个柱子的值,同样从右到左的过程也是,因此即便未遇到比当前元素大的数,只要能够保证比当前元素大的数存在,就可以直接使用从左到右左侧值 - 当前考察柱子高度或者从右到
2021-01-04 11:29:16
140
原创 LeetCode 312 Burst Ballons
思路首先是brute-force暴力,直接dfs,复杂度O(n!)直接爆炸。然后暴力+记忆化,取一个元素后断开的数组会连起来,状态过于复杂,即便可以记忆化复杂度也很大。既然取的过程没法分解问题,那反过来思考,不断的取出等价于一个空数组不断地放回,放回的过程中,一旦某些元素确定位置,就会把整个数组划分成多个部分,因此也就可以对每个部分单独考虑,这样就把整个问题分成了几个子问题,这是分治和动态规划的前提。继续考虑容易想到,假设已经确定第一个放回的是第k个元素,那最终解即是 1 * nums[k] * 1
2021-01-03 11:10:01
126
原创 LeetCode 1263 Minimum Moves to Move a Box to Their Target Location
思路推箱子,数据范围比较小,可以bfs套bfs暴力搜索,不过在外层bfs的时候,是否访问过要同时考虑 箱子位置 和 人的位置。代码typedef vector<vector<char>> VCC;struct Pos { int row, col; bool operator==(const Pos &t) { return row == t.row && col == t.col; }};vector&l
2020-12-17 15:56:52
178
1
原创 LeetCode 659 Split Array into Consecutive Subsequences
LeetCode 659 Split Array into Consecutive Subsequences思路两遍循环第一遍统计每个字的出现次数第二遍判断当前字符是否可作为某个串的结尾,或一个新串的开头比如[1, 2, 3, 3, 4, 5, 6],第二遍循环时,首先判断1可以作为开头,那么对2和第一个3的访问就可以忽略了,之后对第二个3可以作为一个开头,同样忽略4和5,对最后一个6,他可以作为以5结尾的串的后继,将其作为新结尾即可。需要记录数字的可用个数,以及以上一个紧邻数字结尾的串可用
2020-12-15 15:33:16
148
原创 LeetCode 1202 Smallest String With Swaps
思路首先要能想到并且发现,对于任何相连的,或者说在一棵树上pairs,比如[[0, 1], [0, 2], [1, 3], [1, 5], [2, 4], [2, 6]],他们可以通过交换产生任意顺序的排列。证明的方法可以通过表示成树的形式然后分析。简单来说,对于任何两个一棵树上的pair[u, v],都可以通过先将u交换到v,再反过来将v换到原来u的位置实现互换。例如[[0, 1], [0, 3]],1和3互换可以通过swap(0, 1), swap(1, 3), swap(3, 0)来实现。有了上述
2020-12-08 17:23:04
132
原创 LeetCode 413 Arithmetic Slices
思路比较奇怪的题目,实际就是给N个数,求里面的所有长度至少为3的等差数列的个数。例如数组[1, 2, 3, 4, 5]的结果为6,分别是[1,2,3] [2,3,4] [3,4,5] [1,2,3,4] [2,3,4,5] [1,2,3,4,5]。对于长度为N的等差数列,其包含的长度不小于3的等差数列个数是: (N-3+1 + N-4+1 + ... + 2 + 1) = 1 + 2 + ... + N - 2 = (N-1)(N-2)/2,所以双指针找数组中最长的等差数列然后根据长度计算结果即可。(
2020-12-07 19:06:58
129
原创 LeetCode 1388 Pizza With 3n Slices
思路就像提示里说的,该问题实际上可以描述为,给N个数,从里面选择N/3个数使其和最大,选出的数不能相邻,且不能同时选第一个和最后一个。如果没有最后一个限制条件的话,其实就是个背包问题,定义dp[i][j] = [0~i]选j个数的最大和,然后能够得到dp[i][j] = max(dp[i - 1][j], dp[i - 2][j - 1] + slices[i]),也就是计算dp[i][j]的时候需要考虑是否选slices[i]的问题。然后对于第一个和最后一个不能同时选的问题,可以这么思考:因为不能同
2020-12-07 17:24:02
201
原创 LeetCode 567 Permutation in String
解法统计s1中字符出现次数countOfLetters,使用双指针,维护s2中双指针之间的字符的出现次数tmpCountOfLetters以及s1中未被访问到的字符数countLeft。对于双指针i,j,后者用来考察在s1中出现的字符,前者用来将不满足的字符剔除考察范围。j指针前移过程:若 s2[j] 在 s1 中出现过,且当前出现次数小于s1中出现次数 将 j 处字符的当前出现次数加一 tmpCntOfLetters[s2[j]]++ 未被访问字符数减一 cntLeft--
2020-12-06 11:15:48
122
原创 LeetCode 1277 Count of Smaller Numbers After Self
暴搜设从(r, c)向右向下组成的矩阵的值为A(r, c),则有:A(r,c)=A(r+1,c)+A(r,c+1)−A(r+1,c+1)+T(r,c)A(r, c) = A(r + 1, c) + A(r, c + 1) - A(r + 1, c + 1) + T(r, c)A(r,c)=A(r+1,c)+A(r,c+1)−A(r+1,c+1)+T(r,c)其中,T(r, c)表示从(r, c)开始,包含(r, c)的方阵个数若 matrix[r][c] == 1 则 T = 1 + min
2020-12-05 14:49:49
158
原创 C++线程安全单例
C++中实现单例:隐藏构造函数和析构函数隐藏拷贝赋值和拷贝构造函数 =delete使用静态对象和函数实现单例的唯一访问接口线程安全 - 使用mutex和两次检查为空代码(摘自C++单例详解)/** * 单例类的静态函数`GetInstance`提供了获取单例的唯一接口 * The Singleton class defines the `GetInstance` method that serves as an * alternative to constructor and lets
2020-08-16 21:36:08
179
原创 Epoll使用简介
简单介绍epoll在网络套接字上的使用。首先是epoll的使用,主要步骤创建epoll实例 - epoll_create1(0)调用epoll_ctl添加、修改或者删除监听套接字。需要使用 epoll_event对象struct epoll_event tmpEvent;tmpEvent.events = EPOLLIN, tmpEvent.data.fd = fd;使用epoll_wait监听那么如果要使用epoll监听TCP连接,可以按照如下步骤:socket() + bind(
2020-08-14 16:12:37
386
原创 poll使用介绍 - 简单服务器
Linux系统提供了`select, poll, epoll`三种更加高效的IO模型,这里使用一个例子简单介绍一下`poll`在套接字上的使用。基于事件的IO模型允许服务端使用事件触发的方式,在客户端发送请求时触发读取`read`操作,并在写操作`write`不会阻塞的时候写数据。这种IO模型允许使用更少的线程处理更多的客户端连接,能够降低系统负担,提高应用的服务效率。
2020-08-14 11:11:41
1470
原创 使用Docker安装完整Ubuntu容器
文章目录步骤pull镜像 docker pull ubuntu --> image-id使用上述镜像启动容器,名为xxx,后面要用到这个容器 docker run -it --name xxx image-id,替换xxx和image-id现在应该进入终端了,实际就是容器的/bin/bash了。这里需要如下操作更换源,清华源在此,记得选版本以及将https更换为http,因为没有编辑器,需要echo -e 'xxx\nxxx\n' > /etc/apt/sources.lista
2020-07-27 11:42:35
2890
原创 Ubuntu20.04将用户添加到sudo组并且设置不输密码
直接复制askubuntu的了,找了半天https://askubuntu.com/questions/192050/how-to-run-sudo-command-with-no-password对了,记得重新登入 re-login。I found that the most straight forward thing to do, in order to easily replicate this behavior across multiple servers, was the followin
2020-07-23 15:13:10
1593
原创 Javascript - 使用原生动画与canvas制作抽奖圆盘
HTML5中的canvas提供了使用JS脚本在网页上绘制图形的能力,传统的HTML对象往往只能作为矩形或者圆形容器存在,而直接使用图片又比较复杂,且需要适配不同分辨率。因此,本着试一试也不亏想法,作者使用canvas创建了一个抽奖圆盘,配合动画实现抽奖地效果,整个转盘封装成了一个类,并且提供了抽奖方法。
2020-07-20 15:25:05
716
原创 LeetCode Maximum Width of Binary Tree
文章目录题目大意思路代码总结题目大意计算一个二叉树每一层宽度的最大值。宽带并不是几个元素,而是最右边元素的位置-最左边元素位置+1.例如下面这个二叉树的最大宽度为3. 1 / \ 3 2 \ \ 3 9 / 6 思路只要标记一下每个节点的位置左孩子:pos*2, 右孩子:pos*2+1),同时记录每一层开始和结束的
2020-07-12 15:01:21
118
原创 USTC计算数论课程学习记录
文章目录1 大整数因子分解算法1.1 连分数因子分解1.2 二次筛法1.3 数域筛法1.4 Pollard ρ1.5 Pollard p-11.6 P+1算法1.7 椭圆曲线法2 离散对数2.1 小步大步法2.2 Silver-Hellman-Pholig3 模p开平方计算数论学习记录,如有错误,欢迎评论区指正。1 大整数因子分解算法寻找x2≡y2 (mod p)x^2\equiv y^2\ (mod\ p)x2≡y2 (mod p)来分解N。连分数、二次
2020-07-10 14:47:05
2829
2
原创 nginx 转发请求到 unix-socket
Ubuntu 20.04配置文件位于/etc/nginx/中使用sites-enabled前需要移除其中的default.conf示例:server{ listen 80; location /podmanapi/ { # podman api socket proxy_pass http://unix:/run/xxx/xxx:/; }}参考(前两个官方文档已经非常详细了)http://nginx.org/en/docs/http/ngx_http_
2020-07-08 20:14:55
2000
原创 LeetCode Daily Challenge Sort Colors
文章目录题目大意思路代码总结题目大意对一个数组就地in-place排序,即直接在原数组基础上进行。数组只包含0, 1, 2三个元素。例如:Input: [2,0,2,1,1,0]Output: [0,0,1,1,2,2]进阶: 容易想到统计次数+重填的两次遍历的方法,请你给出个一次遍历+常数空间。思路因为只包含三个元素,因此可以采用不断交换的方式。遇到0,就先和前面的2交换,再和1交换,遇到1就和前面的2交换。这样只需记录并更新已考察的元素中,1和2最早出现的位置即可。另外,更新1, 2位
2020-06-12 11:49:41
142
原创 LeetCode Daily Challenge Is Subsequence
文章目录题目大意思路代码总结题目大意判断一个字符串s是否是另一个串t的子序列。子序列指将一个字符串删除若干字符后组成的串。例如abc是assdfbsc的子序列。输入限制:0 <= s.length <= 1000 <= t.length <= 10^4两个字符串都只包含小写字母进阶:假如有超过10亿个s串,一个·t·串,怎么做会更好。思路对于一个s和t来说,可以直接从前往后判断,考虑s中的字符在·t·中最早出现位置即可。但是假如·s·数目较大的话,一个一个判断就不
2020-06-09 16:35:11
127
原创 LeetCode ZigZag Conversion
文章目录题目大意思路代码总结题目大意将一个字符串转换为numRows行的zigzag形式,并按行按列输出转换后的字符串。字符串012345678转换为4行的zigzag后如下所示,输出为0615724830 61 5 72 4 83 更长版本的zigzag0 12 24 361 11 13 23 25 352
2020-06-06 19:52:41
299
原创 LeetCode Daily challenge - Two City Scheduling
文章目录题目大意思路我的方法代码总结题目大意有2N个人,现将这2N个人送到A, B两个城市,每个人送到不同城市的代价为costs。计算将这2N个人送到不同城市的最小代价,要求每个城市刚好送N个人。思路乍一看有点像动态规划,但是思考后发现有一定的贪心策略在里面。实际上,去A的代价与去B的代价 cost[a] - cost[b] 代表让一个人去B能够节约的钱,反之,cost[b] - cost[a] 代表一个人去A能够节约的钱。而这两组数互为相反数。所以只需计算一组然后选前N个去A,后N个去B。优化,
2020-06-03 20:04:05
157
原创 LeetCode Daily challenge - Edit Distance 编辑距离
文章目录题目大意思路代码总结题目大意编辑距离,经典动态规划题目。给出针对字符串的三种操作,替换,删除和插入,编辑距离d,表示将字符串a使用上述三种操作转换为b所需要的步骤。思路计算字符串a和b之间的编辑距离d。子问题构造: a的前缀子串和b的前缀子串之间的编辑距离,前缀子串即包含某位置前的所有字符的子串。因为计算a的前缀子串与b的编辑距离时需要考虑b中的所有字符,因此a和b的子串都要考虑。递推公式: 递推式需要考虑a[i]和b[j]是否相同的情况,例如对于hoe和rose,因为两者最后的
2020-06-01 21:34:05
167
原创 LeetCode Daily challenge - K Closest Points to Origin
文章目录题目大意思路代码总结题目大意找前K小元素,只不过元素是二维的坐标思路很容易想到排序后取前K个,虽然可以但是速度不够快。实际上类似于找第K大(小),可以用划分的方法找,每次随机划分,然后判断接下来从哪儿一边找。STL中有partial_sort和nth_element,尽情AC吧。。。。。代码第二种方法的代码。class Solution {public: vector<vector<int>> kClosest(vector<vector<
2020-06-01 14:28:29
159
原创 LeetCode Daily challenge - Course Schedule
给出n个课程,以及某些课程的预置课程,某课程的预置课程表示必须先参加预置课程后才能再参加该课程。判断是否可以完成所有的课程。有向图判断是否存在环,DFS,BFS经典题目
2020-05-30 17:44:36
161
原创 LeetCode Daily challenge - Counting Bits
给一个整数n,计算0~n每个数的二进制表示中1出现的次数: 利用(x & -x)寻找递推关系。
2020-05-29 11:15:10
158
原创 LeetCode Daily challenge - Possible Bipartition
目录题目大意输入思路代码总结题目大意将N个人划分为两组,每个人可能不喜欢其他人,即不能和不喜欢的分到一组,问是否能够成功划分。输入N和dislike[][2]分别表示人的个数和不喜欢的列表。例如N = 4, dislikes = [[1,2],[1,3],[2,4]],表示4个人,其中1与2,1与3,2与4不能分到同一组。思路类似并查集,因为不喜欢是成对出现的,所以记录每个元素所属的集合以及不喜欢的集合。对于不喜欢列表中的每一对(x, y),如若x,y都未加入任何集合 - 以他们自己为根元素
2020-05-28 10:31:25
206
原创 使命召唤16吃鸡无错误码闪退解决方案
本文适用于在游戏过程甚至大厅中突然卡顿,然后无任何错误码,提示或警告闪退的情况。对于其他的如DirectX遇到错误,错误码等问题请自行百度。解决方法解决方法来自reddit,原贴地址 wtf_crash_to_desktop,作者也再medium发布了解决方案,亲测可行。电脑配置GTX950M + i54200h(是的笔记本你没看错,1280720 全最低40帧实在是凑合*)cmd管理员 ...
2020-03-20 10:07:03
1218
原创 Android创建一个简易课程表APP
文章目录目标问题与解决设计与实现界面设计实现与代码布局文件代码MainActivity代码ClassInfo类代码目标简单的课程表APP,显示课程,学期以及第几周,效果图如下:问题与解决动态添加控件时,对于可以指定style的构造函数如View(Context, AttributeSet, defStyleAttr: Int, defStyleRes: Int),需要使用new Vie...
2020-03-19 13:54:52
9883
5
原创 在blackboard上下载xxx课程的所有作业
文章目录在blackboard上下载xxx课程的所有作业需求技术过程问题与解决代码后记在blackboard上下载xxx课程的所有作业需求因为新冠疫情,学校使用blackboard作为网课平台。这个平台的直播做的还可以,但是批改作业实在是不方便。自动加载的慢,每次都要点击进去手动下载贼麻烦。然而网页几乎全是JavaScript动态生成的,分析文件的下载链接比较麻烦,各种奇奇怪怪的字段还有请求...
2020-03-01 16:03:54
1971
原创 使用C++实现kmeans并使用Python可视化聚簇结果
文章目录C++实现过程算法流程数据结构设计代码:Python可视化过程部分截图注: 本文代码及方法仅供参考,请勿直接使用C++实现过程算法流程kmeans - 点作为数据,cluster是点的聚簇BEGIN 选出来 k 个点作为中心点生成聚簇 循环 计算点与聚簇的距离 每个点加入到距离最近的聚簇中 更新聚簇中...
2020-02-21 21:48:11
825
原创 使用FFmpeg剪辑压缩视频
使用FFmpeg剪辑视频以及压缩(倍速)视频,参考廖雪峰老师的FFmpeg教程,其它博客简书., csdn., csdn…, csdnbbs.剪辑# start - hh:mm:ss# duration - seconds$ ffmpeg -ss [start] -i [inputPath] -t [duration] -c copy [outputPath]# e.g$ ffmpe...
2020-02-21 17:40:32
430
原创 使用Numpy拟合贝塞尔曲线
贝塞尔曲线: 通过起点、终点以及多个控制点绘制得到的曲线,Photoshop中的钢笔工具就是贝塞尔曲线。另外,CSS中动画的计时函数也有三次贝塞尔曲线,例如常用的`ease - cubic-bezier(0.25,0.1,0.25,1)`, `ease-in-out - cubic-bezier(0.42,0,0.58,1)`,本文使用Numpy拟合三次贝塞尔曲线`cubic-bezier(0.3,0,0,1)`。
2020-02-08 20:33:29
4439
3
原创 HarryPotter阅读网站编写记录
文章目录简介动机功能实现翻译翻页动画其它总结简介一个阅读英文版哈利波特的小网站reader,源码放到GitHub上了,感兴趣的可以看看。打开书籍后双击单词能够显示释义(如果有的话),如下图。推荐使用chromium-edge阅读,翻页动画更舒服。动机大概是一两年前吧,因为想看看哈利波特英文原版,就在网上找了epub格式的电子书来看。当时用win10的edge浏览器看epub还是非常舒服的...
2020-02-03 15:28:33
674
原创 JavaScript - requestAnimationFrame使用
文章目录目的函数原型使用目的由于前端的浏览器兼容性问题,很多比较优雅的动画往往只在某些浏览器中可以使用,而在其它浏览器无效。所有浏览器都兼容的requestAnimationFrame便是用来解决这种问题。它能够按照规定的"路线"对帧进行更新,从而实现动画效果。函数原型window.requestAnimationFrame(callback),callback(DOMHighResTim...
2020-02-03 13:51:04
757
原创 纯CSS实现加载动画
先上效果图通过一个父div和两个子div即可实现,主要考虑三点两个子div重叠在一起设置父元素position: relative,然后设置子元素position: absolute就可以使子元素的div重合,然后配合left: calc(20% - 3px)使两个子元素的div居中子div的border的设置使用border-radius: 50%使之成为圆形,然后使用bo...
2020-02-02 23:26:36
1023
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人