自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 服务器被黑记录-问题、探索与检测

问题发现: 系统出现了个挖矿的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 199

原创 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 169

原创 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 157

原创 LeetCode 42 Trapping Rain Water

思路 很直观的解法是不断找凹形区域然后计算,这个思路可以延伸为阶段式的,使用最大高度的柱子将数组划分为三个部分,左边从左到右、右边的从右到左不断找比当前元素大的然后计算所覆盖区域的值,最大柱子之间的直接计算,这样子需要两三次遍历,但可以更高效。 考虑上面所说的从左到右寻找比当前元素大的计算,这样的区域其能容纳的水量一定是其中左边的柱子高度减去中间每个柱子的值,同样从右到左的过程也是,因此即便未遇到比当前元素大的数,只要能够保证比当前元素大的数存在,就可以直接使用从左到右左侧值 - 当前考察柱子高度或者从右到

2021-01-04 11:29:16 98

原创 LeetCode 312 Burst Ballons

思路 首先是brute-force暴力,直接dfs,复杂度O(n!)直接爆炸。 然后暴力+记忆化,取一个元素后断开的数组会连起来,状态过于复杂,即便可以记忆化复杂度也很大。 既然取的过程没法分解问题,那反过来思考,不断的取出等价于一个空数组不断地放回,放回的过程中,一旦某些元素确定位置,就会把整个数组划分成多个部分,因此也就可以对每个部分单独考虑,这样就把整个问题分成了几个子问题,这是分治和动态规划的前提。继续考虑容易想到,假设已经确定第一个放回的是第k个元素,那最终解即是 1 * nums[k] * 1

2021-01-03 11:10:01 92

空空如也

空空如也

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

TA关注的人

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