自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小吴Der

小吴Der

  • 博客(57)
  • 资源 (1)
  • 收藏
  • 关注

原创 算法小点集合

排列组合之隔板法

2021-03-08 16:06:36 285

原创 算法题模板(待补充)

DFS 与 BFS层序遍历BFS,需要维护一个层数的变量 level。参考模板及本题题解 DFS 与 BFS。vector<vector<int>> levelOrder(TreeNode* root) { queue<TreeNode*> q; q.push(root); //... while(q.size()) { int size=q.size(); //... for.

2021-01-11 02:19:44 180

原创 pyecharts-导出svg图像

pyecharts踩坑:pyecharts导出svg图像,执行思路是,先生成html页面,再将html页面转换为svg图像。代码中,必须要注意的是,在声明Bar对象时要传入初始化参数指定导出格式。这样导出的svg插入word以后背景变为黑色,导出的pdf也是黑色的,具体原因我也不清楚。解决的办法是使用Edge浏览器打开svg以后右键打印,去掉页眉页脚,点击打印保存为pdf。目前版本的pyecharts(1.9.0)不能通过参数设置添加坐标轴上面和右面的实线边。解决的办法是对x轴和y轴进行扩展,并设置

2021-08-27 15:23:42 3935

原创 Python-爬取今日头条美图

import requestsfrom urllib.parse import urlencodeimport osfrom hashlib import md5from multiprocessing.pool import Pooldef get_page(offset): params = { 'aid': '24', 'app_name': 'web_search', 'offset': offset, 'forma

2021-03-24 17:22:34 335 1

原创 回溯算法总结

B站参考视频。

2021-03-19 21:41:52 205

原创 LeetCode 84. 柱状图中最大的矩形

原题链接学习关于单调栈的使用。求连在一块的柱状构成的最大矩形的面积,整体思路是:从左到右依次遍历,如果当前柱状条的高度严格大于下一个柱状条,那么由当前柱状限制的最大面积的矩形就可以确定了。这符合单调性质。如果未能满足 1 中的条件,则需要暂时放过去考虑下一个柱状条,然后再从大到小遍历。符合栈的结构。因为柱状条的下标与矩形的宽度有关系,所以栈结构中存放的是某个条的下标。思路参考给出代码:class Solution {public: int largestRectangleAre

2021-03-19 14:47:41 126

原创 LeetCode 837. 新21点

原题链接思路动态规划问题,从后往前考虑。在优化时间复杂度的时候,将前后两项相同的部分消去。关于找状态转移方程的方法,一点感悟是:先定数组形式。一维数组找前后关系,二维数组找临近关系。代码:class Solution {public: double new21Game(int N, int K, int W) { if(K == 0) return 1.0; vector<double> res(K + W); for(int

2021-03-08 17:53:31 90

原创 LeetCode 1314. 矩阵区域和

原题链接本题为数组的二维前缀/行/列 前缀和 的应用。通过前缀和之间 的关系可以得到某区域内结果。代码参考class Solution {public: int get(const vector<vector<int>>& pre, int m, int n, int x, int y) { x = max(min(x, m), 0); y = max(min(y, n), 0); return pre[x][

2021-03-08 12:11:43 94

原创 LeetCode 剑指 Offer 64. 求1+2+…+n

原题链接短路效应的应用本题使用递归结构,一般递归结束条件为: if(n <= 1) return 1;这里可以换成 等价的布尔判断,当 n > 1 的条件 不满足时候,递归此时自动返回,返回层执行return 。本题代码:class Solution {public: int res = 0; int sumNums(int n) { n > 1 && sumNums(n -1); res += n;

2021-03-02 13:49:01 79

原创 LeetCode 剑指 Offer 30. 包含min函数的栈

原题链接使用双栈实现包含min函数的单栈,其中一个站用于维护当前栈内的最小排序元素。class MinStack {public: /** initialize your data structure here. */ MinStack() { while(!mystack.empty()) mystack.pop(); while(!minStack.empty()) minStack.pop(); } void push(i

2021-03-02 13:22:19 73

原创 LeetCode 110. 平衡二叉树

原题链接使用深度优先递归检验一棵二叉树是否是平衡二叉树:代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), le

2021-03-02 12:47:39 74

原创 win10 忘记 mysql(8.0) 密码

安装目录下的data文件夹下有一个后缀名为 .err的文件:以记事本格式打开,Ctrl + F 打开查找,找到后面即为登录密码。

2021-02-02 17:02:01 135

原创 LeetCode 1239. 串联字符串的最大长度

原题链接思路:将26个字母用32位二进制表示独立。如果两个string字母均不同,则二者做与操作结果为0.将没有重复字母的string挑出来,转换为数字处理按照深度优先处理参考了花花酱的B站视频:代码中使用了模板函数 与 C++匿名函数,值得学习。class Solution {public: int maxLength(vector<string>& arr) { vector<int>a; // 清洗arr,

2021-01-28 21:05:51 146

原创 复旦大学2020计算机考研机试题目解答

题目引用A题目:#include <iostream>#include <vector>#include<algorithm>using namespace std;int vecsum(vector<int> vec){ int sum = 0; for(auto i : vec){ sum += i; } return sum;}int main(){ int count;

2021-01-22 19:36:40 1063

原创 LeetCode 743. 网络延迟时间

原题链接一道弗洛伊德算法基本应用,计算网络传播耗时,图论基础。记录一下。代码出处class Solution {public: int networkDelayTime(vector<vector<int>>& times, int N, int K) { const int INF = 0x3f3f3f3f; vector<vector<int>> d(N+1, vector<int>(N+

2021-01-19 18:12:49 90

原创 LeetCode 954. 二倍数对数组

原题链接使用hash表统计每个数字出现的次数,分正负考虑二倍情况,直接在数组中每个元素数量上进行操作。当2倍(负数为1/2)元素的数量减去当前值的数量小于0时候,证明当前值会有多余,不匹配。还利用了map自动排序的功能。自己写的代码不太好,参考了题解class Solution {public: bool canReorderDoubled(vector<int>& A) { map<int, int> cnt; int

2021-01-17 19:00:52 144

原创 LeetCode 17. 电话号码的字母组合

原题链接初次见这样的题,记录一下。方法一: 深度优先搜索方式:递归枚举,递归出口是当字符串为空时候返回。参考官方代码:class Solution {public: vector<vector<string>> getNumPad(){ vector<vector<string>> numPad; numPad.push_back({" "}); numPad.push_back({""});

2021-01-09 16:09:44 91

原创 LeetCode 605. 种花问题

原题链接一道贪心思想的题目思路:每遇到一个可以种花的地方 n 就减一;当满足 n <= 0即满足题目true,返回;遇到已经有花的地方就继续遍历下一个地方;遇到没花的地方,看前面是否有花,后面是否有花,满足条件则种花,即 n 减一;遍历完最后一个元素后返回 n <= 0 的布尔值。时间复杂度为O(n),空间复杂度为O(1)。代码:class Solution {public: bool canPlaceFlowers(vector<int>&

2021-01-08 15:30:56 86 1

原创 LeetCode 219. 存在重复元素 II

原题链接思路:方法一:哈希表存储<value - index>对,先查找是否存在该nums[i],若不存在,则插入;若存在,比较存储的index值与当前下标的差值的绝对值与k的大小,满足条件即返回true,结束返回false。空间复杂度为O(n),时间复杂度为O(n^2)方法二:利用无序set建一个大小为 k 的滑动窗口,判断窗口内是否有重复元素,如果有则返回true,结束返回false。方法一代码:class Solution {public: bool containsN

2021-01-08 01:58:10 81

原创 LeetCode 1588. 所有奇数长度子数组的和

原题链接一道简单题的套路性解法,找各个元素出现次数的规律。思路:要求子数组的长度为奇数,如果以当前元素 arr[i] 为中心,那么只有两种情况:__左右两边均为奇数个元素__左右两边均为偶数个元素找出对应情况的数,相乘即为该元素在最终求和里面出现的次数。代码:class Solution {public: int sumOddLengthSubarrays(vector<int>& arr) { if(arr.empty()) return

2021-01-08 01:19:11 141 2

原创 LeetCode 剑指 Offer 59 - I. 滑动窗口的最大值

原题链接思路:暴力解法和双端队列。暴力解法:窗口每次移动都去找当前窗口内的最大值。双端队列:存储元素的的下标,队列中下标的对应元素是从大到小的顺讯,并按时判断当前队列中的最大值是否还在窗口内。暴力解法:/** * Note: The returned array must be malloced, assume caller calls free(). */int maxInt(int* nums, int left, int numsSize){ int max = -1000

2020-12-13 21:24:14 79

原创 LeetCode 剑指 Offer 40. 最小的k个数

原题链接思路:利用快排的思想,找到能够区分 k 个 和 n-k 个元素的轴值下标k,输出前 k个元素即可。代码分三部分写,分段、判断分段结果函数、初始函数。注意的地方是 partition 函数中判断是否要继续 --right 或者 ++left 的条件中,轴值与数组元素需要至少保持一个有等于的情况,如果两个判断都没有等于的情况,那么会造成无限循环。原因是,如果在等于轴值的地方内层第一个 while 循环退出,在会把 nums[left] 位置的值换成轴值,相应的内层下一个 while 则不进入,

2020-12-13 17:54:35 79

原创 LeetCode 剑指 Offer 61. 扑克牌中的顺子

原题链接思路:最大值与最小值不能超过4;不能出现除0之外的重复数字。bool isStraight(int* nums, int numsSize){ int arr[14] = {0}; // 来个桶统计元素数量 int maxNum = -1, minNum = 14; for(int i =0; i < numsSize; i++){ if(nums[i] != 0){ //元素不为 0 时候统计 arr[nums[

2020-12-13 15:15:08 92

原创 LeetCode 剑指 Offer 62. 圆圈中最后剩下的数字

约瑟夫环问题。思路:一个一个杀掉,再逆向补回来还原位置。参考解释int lastRemaining(int n, int m){ int pos = 0; for(int i = 2; i <= n; i++){ pos = (pos + m) % i; } return pos;}

2020-12-06 17:21:13 107

原创 LeetCode 剑指 Offer 54. 二叉搜索树的第k大节点

思路:开辟数组;中序遍历;索引找值。换成C语言风格。要不然太依赖STL了。/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */void dfs(struct TreeNode* root, int* count, int* returnSize){

2020-12-06 16:52:25 119

原创 LeetCode 剑指 Offer 11. 旋转数组的最小数字

原题链接一道简单题,求旋转数组的最小值。无疑二分法是比较容易想到的。使用了递归结构容易理解,不同很多额外的判断。当然这种解法实际上没有利用旋转数组的特点,对于一般数组也是适用的。技巧性的东西就是在判断搞下标的时候用了取余防止溢出。时间复杂度是O(log n),空间复杂度是O(n)int minArray(int* numbers, int numbersSize){ if(numbersSize == 1) return *numbers; if(numbersSize ==

2020-11-29 18:52:39 80

原创 LeetCode 剑指 Offer 68 - II. 二叉树的最近公共祖先

原题链接之前做了二叉搜索树的最近公共祖先寻找,因为搜索树的有序性,很好做。但是这个题换成了一般二叉树,递归上略微复杂。看了评论里面大神的杰作,实在太nb了嗷。本质上和我的想法是一样的,都是在看目标节点是否在根节点的左右子树中,注意返回值的写法,判断结构 A ? B : C 其中的 B 和C是可以嵌套使用该结构的,学到了。给出代码:struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struc

2020-11-29 17:46:47 114

原创 LeetCode 剑指 Offer 28. 对称的二叉树

原题链接一道思路比较清晰的题目。关于树的处理,第一想到的就是递归咯。思路:想要比较左右是否对称,遍历。一般的中序遍历是从左子节点到根节点再到右子节点,根据这个,我们对称地,先遍历右子节点,再遍历根节点,最后遍历左子节点。得到两个遍历数组,然后比较这两个数组中的结果。时间复杂度是O(n),空间复杂度为O(n).给出代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; *

2020-11-29 15:07:23 84 1

原创 LeetCode 剑指 Offer 42. 连续子数组的最大和

原题链接经典求最大子数组和题目。当然是使用最好的动态规划了,题目比较简单,但是记录一下,算是对动态规划问题的入门学习理解。思路:dp[i] 中保留了以当前元素为最后一个元素的数组的最大子数组和。(这里相当于是在参数传入的数组上直接操作。前后联系起来的关键是“连续”,即:如果前面的一个元素 dp[i-1] 使得自己与后面一个元素 dp[i] 的和变小,那么他肯定不被包含在和最大的子数组中,如果以 dp[i] 开头的数组可能是最大子数组,重新开始算和。即 dp[i-1] <= 0;如果 d

2020-11-22 16:33:02 86

原创 LeetCode 剑指 Offer 10- II. 青蛙跳台阶问题

原题链接思路:斐波那契数列思想,f(n) = f(n-1) + f(n-2)。注意起始条件为f(0) = 1, f(1) = 1;看热评解释吧,嘿嘿代码:class Solution {public: int numWays(int n) { if(n ==1 || n == 0) return 1; int a = 1, b = 1, i = 0; int sum = 0; while(i <= n-2){

2020-11-22 15:20:50 71

原创 LeetCode 剑指 Offer 65. 不用加减乘除做加法

原题链接思路:不让使用一般加减运算符号当然是想到位运算。int 类型数在计算机中是使用补码存放,负数正数的加减规则一样,在计算的时候把有符号数看做无符号数计算,不然会报负值左移错误。两个二进制数异或运算得到每一位进位以后剩下的,例如:二进制1与1异或,结果是二进制10,剩下的0。这一步结果是 ax。两个二进制数与运算得到结果,表示这一位是否产生进位,如果产生进位,进位对应的是更高一位,对齐的操作是让二进制数左移一位。这一步结果是 bx。然后再把 ax 和 bx 相加,重复操作2、操作3。结束的

2020-11-22 14:17:19 228

原创 LeetCode 剑指 Offer 07. 重建二叉树

原题链接思路:根据前序遍历和后续遍历的原理,对数组进行划分,使用递归结构解决构建树的问题。前序遍历的第一个元素是该数组构成树的根节点,在中序遍历中找到该元素,左边即为该根节点的左子树,右边为该根节点的右子树。记录中序序列中左子树节点数,在前序序列中根据该数目得到左子树的前序序列和右子树序列。在中序序列中得到左子树的中序序列和右子树的中序序列。对这两部分使用递归。递归边界是子树为空。给出代码:/** * Definition for a binary tree node. * str

2020-11-15 16:47:11 82

原创 LeetCode 1438. 绝对差不超过限制的最长连续子数组

原题链接思路:使用双端队列维护单调队列,因为过程中需要得到某一段数组的最大值和最小值,在单调队列的队首和队尾可以直接得到当前段的最值。下标 i 在前,j 在后,用 i 指示当前的数组元素nums[i],并且与两个队列的队尾比较。如果小于q1的队尾,那么他是最小的,需要把前面的元素排干净,让nums[i] 成为q1 的队首。如果大于q1队尾,直接入队构成单调递增序列。如果大于q2 的队尾,class Solution {public: int longestSubarray(vect

2020-11-15 16:35:45 169

原创 LeetCode 剑指 Offer 39. 数组中出现次数超过一半的数字

原题链接本是一道简单题,但是涉及到一个比较好的解题思路摩尔投票算法大体的思路就是一个相同的数字和另一个不同的数字同归于尽,最后剩下的定是数量超过半数的。给出代码:class Solution {public: int majorityElement(vector<int>& nums) { int moleVotes = 0, result = 0; for(int i : nums){ if(moleVotes

2020-11-01 15:40:08 864

原创 LeetCode 120. 三角形最小路径和

浮生日记__今天是周日,我好想下去踢球,但是天气不太妙。也是不想学习的一下午,写点博客。正文原题链接题目是很经典的一道动态规划题目,具体思路是借鉴的B站这位小姐姐的从下往上的分析思路。一开始自己做的时候,用的是一般的贪心算法,卡在了[[-1],[2,3],[1,-1,3]]的用例上,行不通的原因就不做过多解释了。给出C++代码:class Solution {public: int minimumTotal(vector<vector<int>>&

2020-11-01 14:45:09 147

原创 LeetCode 02.08. 环路检测

原题链接原本以为可以用链表的一般操作解决,试了好多都不行,能想到的基本复杂度比较高。题目评论中最好的答案就是快慢指针的方法,但是描述的都不够清楚,看B站老哥的视频茅厕顿开。继续努力,我们都有光明的未来!贴出代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL)

2020-10-25 13:53:32 99

原创 LeetCode 1171. 从链表中删去总和值为零的连续节点

浮生日记__今天是状态很差的一天,这几天的睡眠一直不好,对床的哥们半夜把电脑拿上床玩,一直开着最亮的屏幕,反光在墙上太刺眼了,搞得我睡不着,哎,不想去说他,不值当的。白天在图书馆困的和狗一样,不停地打哈欠,中午想着回去美美的睡个午觉,好不容易睡着了,又被回来的老哥吵醒了。__最令我烦的是,寝室里一哥们保研了,每天看似舒服得一批,咱也没啥兴趣去问人家每天干啥。高傲的不行,是之前另一个寝室里搬来的,原因是和同学有矛盾。来了我们寝室之后,感觉还不错,处得来。日久见人心,时间长了之后,该暴露的就都暴露出来了。

2020-10-25 10:17:39 158

原创 LeetCode 面试题 02.05. 链表求和

浮生日记__今天是周末的图书馆,前些天踢了球,累的要死,按照惯例写两道LeetCode放松一下。心情有点糟糕,旁边一个哥们体味好重,周围的妹子也没有昨天的多。有时候感觉自己的博客写的很枯燥,想搞一点趣味性的东西,以后就在博客开头写一点自己遇到的有趣的事情吧,尽量控制字数。__先写的下面的内容,返回来写这一段的时候,周围为数不多的几个妹子因为难忍的味道陆续离开了。这个哥们怎么这么不自觉,知道自己邋遢就不要来图书馆祸害别人了好不好,好烦啊,其他地方也没有一个合适的插座呐。__有点烦躁,下回再写。正文:

2020-10-11 15:36:26 117

原创 LeetCode 24. 两两交换链表中的节点

原题链接本题两种思路,递归和非递归我使用的是递归结构,运行的结果很惨,时间和内存都是5%。思路比较简单递归思路:从前往后处理链表,声明指针 ListNode *p,*q,p在前,q在后;将p和q的位置互换;p要先指向q->next,q后面的节点递归处理;递归推出条件为链表中少于两个节点;给出代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNod

2020-10-04 20:20:15 85

原创 LeetCode 剑指 Offer 35. 复杂链表的复制

原题链接思路:这道题直观的看起来甚至不需要什么算法,就按照一般的复制思路,新开辟空间,然后把对应的节点的值抄过去,先不看random。令人头疼的是Node->random是随意指向的,没有什么规律可以遵循。于是想到将每个节点的random相对于头节点的偏移量找出来,在新的链表中对应的偏移量找到random节点,指向即可。起初以为这样做会超时,但结果还好,时间54%,内存60%。不好的一点是用了很多指针表示位置,有些乱,思路简单是要付出代价的呵呵呵呵。给出代码:/*// Defin

2020-10-04 16:32:38 114

考研计算机网络协议总结

考研计算机网络协议总结,名称、所在层、作用及其他注意点备注,按照2021届王道书总结的,考前可以看一看,快速记忆零碎的知识点

2020-11-26

空空如也

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

TA关注的人

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