自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【模拟滤波与数字滤波区别】--双线性变换的预畸变处理理解及验证;matlab中freqz、freqs、loglog、bode函数绘图的区别

主要包括内容:模拟滤波与数值滤波区别,双线性变换的预畸变处理前后区别,频域绘图函数freqz、freqs、loglog、bode、plot之间的区别及使用方法。

2024-01-23 10:46:00 1179

原创 【Matlab纯代码绘图】---科研报告/SCI绘图

Matlab纯代码实现SCI级别绘图

2023-04-25 17:28:13 971

原创 Matlab多元非线性函数拟合

主要以示例给出如何用matlab进行多元非线性函数曲线拟合

2023-02-27 18:45:56 7925 6

原创 【剑指 Offer 41. 数据流中的中位数】+手撕堆排代码解析+类成员变量作引用传参解析

害怕面试官不允许使用库,一怒之下手撕该题代码,实现堆排,手撕make_heap/pop_heap/push_heap函数;另外因为要实现堆排,涉及到了类内成员变量作引用传参的知识点,这个应该面试也会问;下面上代码和问题遇到的问题总结:1. 类内没有实例化模板类,报错C2440,“初始化”: 无法从“initializer list”转换为,必须实例化模板类。2. 类内成员变量作引用,必须声明 为引用变量,同时采用有参构造的初始化形式进行初始化。否则无法对外部变量进行更改;直接赋值,报错您没有初始化。结果

2022-07-13 20:02:23 158

原创 【普通函数/函数指针】和【函数对象】作参数的区别及使用

就几个例子简单介绍一下【函数指针】和【函数对象】的区别,后面还会继续更新C++函数对象不是函数指针,它是一个类重载(),它的调用方式与函数指针一样,后面加个括号就可以了。既然C++函数对象与函数指针在使用方式上没什么区别,那为什么要用函数对象呢?很简单,函数对象可以携带附加数据,而指针就不行了。这里可以看出C++函数对象可以更改less( num)的num值附加数据,而函数指针只能指向一个地址,不具备这种功能。但是函数对象并不能完全替代函数指针,比如函数对象不能做回调函数,因为类的成员函数的地址只有在实例

2022-07-12 22:11:29 677

原创 【priority_queue】【make_heap/push_heap/pop_heap】的用法及参数解析

主要分为两部分1.priority_queue的作用:实现大顶堆,小顶堆,本文主要就该容器的使用方法和如何定义第三个模板参数进行详解,需要读者对模板、函数指针、函数对象(仿函数)有一定了解。2. 第二种库函数方法实现大小顶堆:vector、make_heap、push_heap、pop_heap组合使用,·2.2 priority_queue的使用方法介绍1.第一种:只定义一个参数,默认形式下,这里是一个关于字符串的大顶堆(按字符串的第一个字符排,最大的在堆顶)2.第二种:改变第三个模板参数实

2022-06-07 21:37:17 542

原创 【剑指offer专项】II 047. 二叉树剪枝

以此题为例,区别递归和迭代的区别递归:迭代:2.中序遍历递归:迭代:3.后序遍历递归:迭代:

2022-06-03 15:42:39 72

原创 【剑指offer专项】48. 序列化与反序列化二叉树

概述前序遍历可以比较简单的实现。反序列化。但是中序遍历较为复杂。因为第一个节点处于第几层无法知道,除非在中序序列中有信息体现。否咋无法反序列化构建二叉树。这里给出了一种方法使用中序遍历来构建二叉树。代码及注释如下:以下面二叉树为例:二叉树中序遍历 序列化后的字符串为: ((X)2(X))1(((X)4(X))3((X)5(X)))。相当于一个根节点的表示方法为:(左子树信息)根节点值 (右子树信息)。然后层层递归。得到上述字符串,字符串包含了第一个节点所处的二叉树深度的信息。反序列化如果无法理

2022-05-28 15:32:23 60

原创 【剑指offer专项】21-25链表刷题(链表的环境搭建问题)

概述leetcod上用链表刷题时,如果你需要调试的话,在leetcod上很不方便,使用cout来看结果也不是一个好办法,特别是对于递归这种算法,不一步一步的调试很难搞懂。这时候就需要在本地的VS中调试,但是你需要手搭一些环境,比如说链表的创建,环链表的创建,以及链表的显示,有些时候这个东西很繁琐甚至比题目还难。下面给出我的环境搭建代码方便大家参考,这样就直接可以再VS中输入输出了。当然我也问了一些大佬,他们建议还是leetcod上在线做题,实在搞不懂了可以这样本地调试。C++在VS就leetcod链表题

2022-05-08 19:01:59 752

原创 【剑指offer专项】20. 回文子字符串的个数(manacher算法)

manacher算法原串回文串终点的求法:原串回文串的长度为 MLC[POS(after)]−1MLC[POS(after)]-1MLC[POS(after)]−1。原理可参考https://zhuanlan.zhihu.com/p/70532099,但是他的回文半径和这里的描述相差1,整体逻辑是一样的都是正确的,描述方法不一样而已。然后还有提一个关于leetcode上初始化f(i)f(i)f(i)的理解模型:...

2022-05-05 17:33:05 268

原创 【剑指offer专项】17. 含有所有字符的最短字符串

思路:对于基串,用vector创建一个英文字母表来记录,一共52个字母,字母x每出现一次cnt[x]-1。对于参考串,采用滑动窗口,枚举不同首字母的子串。滑动窗口可用分析:“aabbcd”中找“abc” “(aabbc)d”中含有“abc”,移动首指针 “a(abbc)d”中也含有“abc”,可以发现前一次寻找的最后一个字母c是满足要求所必须的,所以,即时移动了首指针,要使满足要求,c也必须包含,所以尾指针是不需要前移的,因此可以使用滑动窗口。滑动窗口的使用:枚举不同首字母子串,在不同的首字母下,让

2022-05-03 18:21:42 214

原创 【剑指offer专项】16. 不含重复字符的最长子字符串

思路哈希表+滑动窗口枚举子串的首字母,寻找最长不包含重复字符的最长的子串,这个过程就是low指针不变,high指针不停右移,直到下一次字符使它出现重复,这时更换首字母,让low指针右移,.再重复上面high指针右移原则。分析:这个过程,high指针不需要左移,eg, "(abc)abcbb"中“abc”不包含重复,那么“bc”也一定不包含,当high指针不用向左移动,枚举low指针,就可以使用滑动窗口。可以使用无序哈希表 unordered_map来记录子串的字母,用map.count(k

2022-05-03 18:16:04 68

原创 【剑指offer专项】14和15. 字符串中的变位词、字符串中的所有变位词

概述15题和14题的思路类似都是采用滑动串口的方法方法分析为什么不采用为运算 mask |=1<<(s1[i]-‘a’) 呢?因为这里需要检测重复字母,eg.s1=“aab”;所以这里采用 vectorcnt(26) 容器,记录26个字母中,每个字母出现的次数:++cnt[s1[i]-‘a’],这样就知道一个字母出现了多少次。为什么使用滑动窗口?首先这里窗口的长度是不变的(基串p的长度),就代表high指针不需要前移。思路用cnt[x]=cnt2[x]−cnt1[x]c

2022-05-03 18:08:50 65

原创 【剑指offer专项】13. 二维子矩阵的和

解题思路:1. 计算二维数组的前缀和presum。[row1][col1]- [row2][col2]之间的元素和可以用presum[row2][col2]-presum[row2][col1-1]-presum[row1-1][col2]+presum[row1-1][col-1]来计算,可以画图理解。若要取橙色这一块的前缀和。就需要使用上述公式。为了防止row=0, 0-1= -1 的越界情况,所以将行列的0位都用0填满,row=1表示第一列,而不是0.因此上述公式就变成了pr.

2022-05-03 17:00:40 244

原创 【剑指offer专项】11. 0 和 1 个数相同的子数组

思路:将数组中0元素转为-1,则数组元素和=0代表0与1元素个数相等。此时就可以利用前缀和=0来判断子数组中0与1元素相同。因为要找最长的子数组,所以哈希表中只存前缀和第一次出现的下标。(如果是找所以0和1的子数组就不能这样)对应代码和注释如下:class Solution {public: int findMaxLength(vector<int>& nums) { int counter = 0; unordered_map<int, int&g

2022-05-03 16:22:31 92

原创 【剑指offer专项】10. 和为 k 的子数组

知识点总结为什么不采用滑动窗口而采用前缀和+哈希表?因为,该数组中含有负数,若以枚举low指针方法找子串,high指针有些时候需要左移。所以不能使用。对应的代码和注释:class Solution {public: int subarraySum(vector<int>& nums, int k) { map<int, int> mp; mp[0] = 1; int pre = 0,ans=0; for (auto n : nums) {

2022-05-03 16:12:12 71

原创 【剑指offer专项】8. 和大于等于 target 的最短子数组

知识点总结针对二分查找的代码:`auto bound = lower_bound(sums.begin(), sums.end(), target);if (bound != sums.end()) {ans = min(ans, static_cast<int>((bound - sums.begin()) - (i - 1)));}vector.end()是指向 容器最后一个元素+1.2.滑动窗口;多使用格式: while (end < n) {

2022-04-26 16:58:07 180

原创 【剑指offer专项】7. 数组中和为 0 的三个数

知识点总结有序排列可以使用双指针找目标数值,不用进行二重循环。使复杂度由O(n²)→O(n)验重的设计,自己设计的思路不对,看了官方题解才知道怎么做:使用的方法应该是:这一次遍历找数结束后,查看是否有重复数然后跳过,我的方法: 直接看下次数是否重复,将第一指针移到没有重复的地点,再进行循环体找数,导致第二指针直接不能取到这个数。方法不好。图示:官方的:我的:vector<vector> vtest; 直接可以插入int数组型数据:如 vtest.push_back({1,

2022-04-26 16:45:19 58

原创 【剑指offer专项】6. 排序数组中两个数字之和

知识点总结:因为该数组是升序排列的,所以可以用二分查找。不需要遍历数组的每一个元素。二分查找的时间复杂度为O(logn)O(log n)O(logn)。第一个数的遍历需要n次,第二个数使用二分查找,所以时间复杂度为O(nlogn)O(nlogn)O(nlogn)。一个时间复杂度更简单的方法:双指针,也是针对升序数列,(从原理上说降序也可以)两个指针移动的次数和不超过n。负载度为O(n)O(n)O(n)。给出一个示意图:注意事项若v.size()=3; v[high]=v[3] 出现溢出。遍历

2022-04-26 16:23:04 68

原创 【剑指offer专项】4. 只出现一次的数字

知识点总结:需要注意的是error: non-void function does not return a value in all control paths [-Werror,-Wreturn-type]错误。在VS中不会报错,但提交后会报错,这是有分支没有返回值,虽然不会出现这种情况,但是编译器不会这么认为。在句尾加return -1(任意值).参考官方吧,没什么难度官方知识点:for (int num: nums) 对vector容器的遍历,遍历int类型nums中的每一个

2022-04-22 10:53:59 85

原创 【剑指offer专项】5. 单词长度的最大乘积

单词长度的最大乘积刷题总结算法知识总结该方法目前只能采取位运算的方法。 朴素做法是遍历每一对单词,然后遍历他们的每一个字母。该方法时间复杂度O((n∗n−1+(n−1)∗(n−2))+...)∗li∗lj(n*n-1+(n-1)*(n-2))+...)*l_i*l_j(n∗n−1+(n−1)∗(n−2))+...)∗li​∗lj​)。时间复杂度过大。采用位运算时间复杂度为O(n2n^2n2)相对简单很多。位运算的图示官方说可以采用map容器进一步优化位运算,但是有人说map的查找

2022-04-22 10:50:48 1120

原创 【剑指offer专项】3. 前 n 个数字二进制中 1 的个数

知识点总结解题思路动态规划 +位运算对于所有的数字,只有奇数和偶数两种:奇数:二进制表示中,奇数一定比前面那个偶数多一个 1,因为多的就是最低位的 1。偶数:二进制表示中,偶数中 1 的个数一定和除以 2 之后的那个数一样多。因为最低位是 0,除以 2 就是右移一位,也就是把那个 0 抹掉而已,所以 1 的个数是不变的。所以我们可以得到如下的状态转移方程:dp[i] = dp[i-1],当i为奇数dp[i] = dp[i/2],当i为偶数上面的方程还可进一步合并为:dp[i] = dp[

2022-04-21 11:29:33 37

原创 【剑指offer专项】2. 二进制加法

刷题总结

2022-04-21 11:19:47 271

原创 【剑指offer专项】1.整数除法刷题总结

整数除法刷题总结这里写自定义目录标题前提知识点总结主要难点补码的知识前提刷题已经开始了,希望通过记笔记的方式来帮助自己理清思路,同时方便后续复习。同时也希望通过这种方式能帮助到一些同样在刷题的朋友。知识点总结主要使用的知识点:计算机的计算方式;补码反码;数据类型溢出问题;二进制左右移运算的运用(位运算);时间优化问题;主要难点为什么会越界?越界怎么处理计算机的减法是用补码进行运算的。具体参考下面补码的知识。对于int的32位,其数值范围为2^32-1—— -2^31 .当算法中出现了ab

2022-04-20 10:04:32 321

空空如也

空空如也

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

TA关注的人

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