自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【机器学习-西瓜书】-第5章-神经网络-学习笔记

周志华-机器学习-第5章-神经网络-个人学习笔记

2022-10-23 10:56:13 848 1

原创 【机器学习-西瓜书】-第4章-决策树-学习笔记

周志华-机器学习-第4章-决策树-个人学习笔记

2022-10-20 20:21:55 485

原创 【机器学习-西瓜书】-第3章-线性回归-学习笔记-下

周志华-机器学习-第三章-个人学习笔记-下

2022-10-19 18:21:20 431

原创 【机器学习-西瓜书】-第3章-线性回归-学习笔记-上

周志华《机器学习》,学习笔记,第三章线性回归

2022-10-17 09:55:48 651

原创 【机器学习-西瓜书】-第2章-模型评估与选择-学习笔记

周志华-机器学习-第2章-个人学习笔记

2022-10-11 20:25:07 430

原创 【机器学习-西瓜书】-第1章-绪论-学习笔记

周志华《机器学习》-个人整理笔记

2022-10-10 13:28:35 389

原创 【刷题基础知识】-排序专题

排序排序算法时间复杂度总览冒泡排序基本思想代码选择排序基本思想代码参考自十大经典排序算法(动图演示)和www.acwing.com,花花酱,再加上自己的一些理解排序算法时间复杂度总览冒泡排序基本思想从前到后,两两元素进行比较,前一个比后一个大则进行交换第一轮遍历后最后一个元素是最大的元素,第二轮遍历后会将倒数第二大的元素移动到倒数第二个位置上,不断重复遍历该组元素就会将元素按照升序进行排列代码基础代码:/* 这种写法的冒泡排序的时间复杂度一定是O(n^2)了*/#include &

2021-06-29 20:59:49 275 1

原创 【LeetCode120】-三角形最小路径和

实现思路动态规划中数据的表示含义: 第i行第j个元素到底层的最短路径求解: 是该元素相邻两个节点到底层距离+自己本身数值 取最小值如果从上到下计算,并不合理这样无法求解,且按照定义明显,最上层的元素应该是由下至上依次求解得到的实现代码class Solution {public: int minimumTotal(vector<vector<int>>& triangle) { int dp[205][205]; for(

2021-05-21 13:08:41 67

原创 【算法笔记】-算法初步-递归

分治分治将原问题划分为若干规模较小而结构与原问题相同或相似的子问题,然后分别解决这些子问题,最后合并问题的解,即可得到原问题的解分为三个步骤分解、解决、合并注意: 分治法要保证子问题之间是相互独立的递归递归中两个重要的概念:递归边界递归式经典题目n!斐波那契序列全排列#include <iostream>#includee <cstdio>using namespace std;const int maxn=500+5;int

2021-05-21 12:26:55 88

原创 【算法笔记】-算法初步-排序

sort的使用sort在进行自定义结构的排序的时候,需要自定义函数cmp这里面要注意的是strcmp的使用strcmp头文件:#include <string.h>strcmp的返回值有0,<0,>0

2021-05-19 14:33:54 88

原创 【算法笔记】-入门模拟(留有问题)

PAT1001 害死人不偿命的(3n+1)猜想#include <iostream>#include <cstdio>using namespace std;int main(){ int n; scanf("%d",&n); int cnt=0; while(n!=1){ if(n%2==0){ n/=2; }else{ n=(3*n+1)/2;

2021-05-13 20:44:58 359 1

原创 【LeetCode416】-分割等和子集

方法一(位运算)实现思路其实是一种几乎使用暴力求解的方法,但利用位运算进行了优化,用位运算中的0或1来代表集合中是否出现该元素,计算下集合中所有元素的和,如果和为总数量的一半,说明满足条件;之后再将满足条件的集合对应的值(并非相加计算的值),也就是代表集合中都有哪儿些元素的那个值,两两相或,如果两个相或的元素之间没有交集也就是相或结果为0的情况下满足条件。实现代码class Solution {public: int get_num(vector<int> &nums)

2021-04-10 16:36:49 85

原创 【LeetCode518】-零钱兑换 II

实现思路实现代码提交结果及分析时间复杂度O(n*amount),空间复杂度O(amount)

2021-04-10 13:49:29 68

原创 【LeetCode322】-零钱兑换

方法(动态规划)1.1实现思路利用之前的思路进行分析,首先分析DP数据代表的集合的含义,设置动态规划 的数组为DP,那么DP[i]代表的就是金额为i时使用的最少的钞票的数量,枚举所有和金额i有关系的钞票的金额,从中选择最小的那一个1.2实现代码class Solution {public: int coinChange(vector<int>& coins, int amount) { if(!amount) return 0; vec

2021-04-10 09:50:51 62

原创 【Markdown快速上手】

1.标题标题:# 一级标题## 二级标题### 三级标题#### 四级标题#### 五级标题##### 六级标题2.字体**加粗***斜体*--删除--3.排版(1)分割:---***(2)空格:&emsp;&ensp;&nbsp;(3)居中:<div align=center></div>(4)列表+无序列表 +//改动无序列表的层级4.引用相关(1)>引用(2)代码块//```

2021-04-07 19:27:19 78

原创 【LeetCode198】-打家劫舍

方法一(DP)实现思路实现代码class Solution {public: int rob(vector<int>& nums) { if(!nums.size()) return 0; if(nums.size()==1) return nums[0]; vector<int> dp(nums.size()+1,0); dp[1]=nums[0]; dp[2]=max(nu

2021-04-07 16:02:31 70

原创 【LeetCode407】-接雨水 II

方法一实现思路实现思路,是基于【LeetCode42】-接雨水的思路,不同点在于不仅要考虑上下左右的最大值,同时也要考虑斜着的最大值最小值,针对每一个点,取这些最大值的最小值减去该点的高度值,就可以得到最终的结果实现代码(待补充)这个代码是有些不完善的,现在是只考虑上下左右的最大值,而没有考虑斜着的最大值,这种作法有待补充和优化class Solution {public: bool inner(int row,int column,int x,int y){ retur

2021-04-07 14:03:04 219

原创 【LeetCode473】-火柴拼正方形

实现思路实现代码提交结果及分析待改进代码:bool cmp(const int a,const int b){ return a>b;}class Solution {public: int sum_nums(vector<int> &nums){ int sum=0; for(int i:nums){ sum+=i; } return sum; }

2021-04-05 20:06:27 120 1

原创 【LeetCode126】-单词接龙 II

方法一实现思路实现代码const int maxn=5000+5;int path[maxn];void init(){ for(int i=0;i<maxn;i++){ path[i]=-1; }}class Solution {public: vector<string> getpath(bool flag,string beginWord,string endWord,vector<string>& word

2021-03-31 20:39:57 835

原创 【LeetCode127】-单词接龙

方法一实现思路主要思路是将字符串映射到来数字将问题抽象为求解最短路当两个单词之间只有一个字符不相同时就会有一条无向边求最短路的方法使用的dfs实现代码(超时)class Solution {public: int re; void dfs(vector<int> &book,vector<set<int>> &path,int start,int end,int step,int &re){ boo

2021-03-28 13:38:21 103

原创 【LeetCode200】-岛屿数量

方法一(DFS)实现思路思路是深度优先搜索+标记法需要额外开辟一个二维数组book来表明当前元素是否被遍历过,对每一可以构成岛屿遍历的结果使用flag来标记,不同的岛屿使用不同得到flag来标记,由于我设置flag是从-1然后依次递减的,所以最后的结果实际上就是flag数值的绝对值遍历整个原始的二维数组,每到一个点判断是否为土地且没有被划分到一个岛屿中,如果该土地没有被划分到一个土地中,就以该土地为起点作为一个新的岛屿来找其相邻的岛屿土地实现代码class Solution {private:

2021-03-27 11:01:11 61

原创 【LeetCode76】-最小覆盖子串

方法一实现思路实现思路是参照了【LeetCode3】-无重复字符的最长子串双指针+字符哈希1.首先统计所有匹配的子串出现的字符的种类及has_cnt数量,然后遍历许匹配的字符串2.同时在这个过程中记录当前的子串word,以及维护字符串s在这个过程中每个字符动态变化的数量cnt当cnt的数量大于has_cnt的时候,尝试移动begin————begin能移动的条件为cnt[begin]>has_cnt3.每次新产生的word子串都要判断一下是否满足条件且小于当前最短的子串结果判断子串满

2021-03-27 09:23:48 91

原创 【LeetCode187】-重复的DNA序列

方法一实现思路这种实际上是一种暴力求解的思想,从头到尾开始遍历所有长度为10的子串,在这个过程中利用map不断记录出现的子串的次数,最后遍历map中的结果,将统计的数目超过1的压入最终的字符数组中实现代码class Solution {public: vector<string> findRepeatedDnaSequences(string s) { map<string,int> cnt; vector<string>

2021-03-24 21:21:53 62

原创 【LeetCode3】-无重复字符的最长子串

实现思路优化至O(nlog(n))的算法,大部分是分治思想后者是二叉树的思想扫描整个字符串的一般还是考虑O(n)的时间复杂度实际上是要优化枚举在枚举的过程中存在很多不必要的枚举,当已经出现重复字符时就应该停止枚举双指针解决的思想只要满足begin是永远小于i,这个算法的时间复杂度一定是O(n)实现代码提交结果及分析...

2021-03-24 20:06:03 76

原创 【LeetCode49】-字母异位词分组

方法一实现思想由于每一个字符在字符串的排列组合是很多的,为了便于比较直接将每一个字符串内部进行排序,排完序之后再将整个字符串数组进行排序,在排序的时候需要记录自己原本的数组下标,然后依次遍历字符串数组,当排序后的字符串相同,就将原本字符串的形式压入相同的字符串数组中即可。实现代码bool cmp(const pair<string,int> &a,const pair<string,int> &b){ return a.first<b.first

2021-03-24 15:41:46 60

原创 【LeetCode290】-单词规律

实现思路利用map映射,将pattern中的字符映射到单词中,但实际上不仅要考虑这个映射,也要考虑单词映射到字符的情况,否则将无法识别:“abba”“dog dog dog dog”这种情况;除此之外,也要考虑,可能pattern中的字符个数和单词个数不匹配的问题我的思路是单词映射到字符,字符映射到单词保证两者是一一对应的关系,而另一种思路是使用unsed标志数组来看字符是否在之前已经别的单词映射了来判断。实现代码class Solution {public: bool word

2021-03-20 11:01:11 49

原创 【LeetCode409】-最长回文串

方法一实现思路主要利用了字符串哈希,将字符串对应的ASCII码作为下标来进行使用,先遍历字符串,统计字符串中每一种元素出现的次数。分情况讨论:偶数偶数的情况好考虑,直接将其数量添加到最长回文串的总数量上奇数奇数的情况要考虑,其实类似bbabb这样结构也是被允许的,说明在回文串中允许出现一个奇数,其他奇数再次出现时,只能保留其2的倍数个实现代码 bool cmp(const int a,const int b){ return a>b; }

2021-03-20 10:19:07 58

原创 【刷题基础知识】-哈希表

哈希表的概念桶排序由于通常排序的时间复杂度都是O(nlog(n)),当需要的表长不长,排序的元素集中在一个数据范围内,这种排序的时间更优总结字符哈希和正整数的哈希是有取值范围的通用的方法头插法的好处不需要额外遍历到尾部,需要额外开辟空间设置表长一般取质数会使哈希表比较分散节点维护开辟内存的工作一般放在算法之外维护比较好遍历vector来释放new的空间哈希有两种应用元素出没出现元素映射为新元素...

2021-03-20 09:36:07 90

原创 【LeetCode70】-爬楼梯

方法一(暴力递归)实现思路原问题分解为子问题,子问题就是走一步还是走两步,走一步就多增加一种走法,走两步就增加两种走法实现代码一种遍历的写法void solve(int n){if(n== 1 || n==2){return n;}return solve(n-1)+solve(n-2);}这种情况下的写法之所以没有问题,原因是由于n的最小值一定是1,当为1的时候就会返回,不会出现无限循环的情况提交结果分析超时的原因:其实走每一步就是相当于有两种选择,要么走一步要么走两步,最终

2021-03-11 22:16:26 73

原创 【LeetCode449】-序列化和反序列化二叉搜索树

解码和复原的思考:其实只有前序的序列才可以实现,前序的情况第一个是根节点,所以才方便以此为开端建树实现思路字符串转换为二叉树(1)先将所有字符串按逗号分隔出整数(2)再利用整数新new节点,将所有的节点都存储在vector中可以发现题中给出的序列是前序遍历,也就是意味着第一个为根节点,遍历vector中除根节点以外的节点依次开始建树二叉树转换为字符串(1)实现将大于等于1位的整数转换为字符串(2)转换之前先拼接[(3)转换之后再拼接](4)中间过程记得除了第一位,都在前面加上,此过

2021-03-10 19:31:56 98

原创 【刷题基础知识】-二分查找树

set本身是一个二叉查找树传递指针的好处:相当于是在外部进行管理节点,在函数内部只是管理指针的指向TIP:(一)算法和内存维护最好分开考虑如果混在一起,就不能单独操作一个节点了,缺少一些灵活性(二)new的节点记得delete(三)在创建树的时候,可以提前把所有创建好的节点放在vector数组中,然后利用vector数组中存放的节点,一次插入节点创建一个树,这样做的好处在于delete的时候可以直接删除vector即可...

2021-03-10 14:40:38 60

原创 【LeetCode33】-搜索旋转排序数组

方法一实现思路(一)先遍历数据,如果数据一直单调递增就计数+1,直到第一个不递增的数停止,利用这种方法就可以知道未被翻转的原数据的头部下标t(二)然后将给出的翻转数据排序,然后利用二分查找找出元素是否出现在该数组中,如果在获取下标,因为该数据经过了重新排序,所以我们需要将该数据转换成翻转数据的下标index,转换公式:(index+t)%nums.size()总体思路是不破坏二分查找的结构,而将注意力转移到二分查找之后的数据上实现代码class Solution {public: i

2021-03-09 09:17:03 52

原创 【PAT1004】-Counting Leaves

实现思路题目大意就是计算出树的每一层中叶节点的个数(一)建树构建树的节点这一步决定了节点和节点之间的连接关系,在本体中没有提到树是二叉树,所以孩子节点的存储依靠vector存储,为方便存储在里面存放的是节点的id号存储所有树的节点由于存储的孩子是id号,且本题中树的个数不超过100,那么直接创建一个105大小的树节点指针的数组,数组的下标正好对应树节点的id号正常读取数据建树即可(二)遍历这里面遍历正常使用递归遍历即可,在遍历的过程中传递层数这一参数,当该节点为叶节点在本层记录

2021-03-08 22:17:56 69

原创 【LeetCode34】-在排序数组中查找元素的第一个和最后一个位置

方法一实现思路由于在本题中有重复元素的存在,不能直接使用二分查找先使用map统计了下每一个元素出现的次数,然后利用set构造了没有重复元素的vector数组,在该数组中进行二分查找,当查找到该元素后,利用map数组中存储的数据,实际计算出数据出现的范围,然后返回结果;当没有找到时,直接返回[-1,-1]主要思想是二分查找框架上的小拓展实现代码class Solution {private: map<int,int> cnt;public: void get_beg

2021-03-08 22:17:29 49

原创 【LeetCode35】-搜索插入位置

实现思路使用二分查找,利用二分查找循环代码的框架具体可参照【刷题基础知识】-二分查找与普通的二分查找不一样的点主要在于这里面不仅要判断是否存在元素,如果找到了该元素要直接返回该位置,如果没有找到要返回该元素正确应该在的位置。情况可以主要分为两大类第一类:找到了该元素,直接返回该元素的下标第二类:没有找到该元素,需要再分两种情况(1)target比终止状态大在正常的比较中,这个target最后一步是和1比较可以发现target比1大此时begin=0,end=0,按照算法begin=m

2021-03-08 21:42:31 58

原创 【刷题基础知识】-二分查找

递归版循环版总结分治思想很容易用循环来实现一些回溯的算法很难用循环来实现

2021-03-08 21:15:37 86

原创 【PAT1003】-Emergency

实现思路由于是求最短路,我想到了用前向星+SPFA的解法在求解的过程中注意考虑当两条路的长度相同时,选择累积的消防队最多的那条路但是提交后:只通过了第一个测试点上网找了相关SPFA解法的博客利用SPFA算法解决PAT A1003全网最全!PAT甲组1003.Emergency (优先队列实现迪杰斯特拉算法,Bellman算法,SPFA)思路与注意点–补充《算法笔记》重要警示!!!不要再脑子不清楚的情况下瞎做题,我一直认为自己的思路没有问题,原来是我没注意题目想要的结果是什么,结果要的不是最

2021-03-06 15:50:22 168 1

原创 【LeetCode207】-课程表

方法一(DFS)实现思路将所有的关系抽象为有向图,图的结点代表的是课程,有向边代表的是两者之间的先后关系核心思想: DFS+访问状态访问状态的设置:(1)-1代表没有访问(2)0代表当前正在访问的结点(3)1代表已经访问过大体步骤:(一)初始化,初始化所有结点的初始访问状态为-1,建立邻接表(二)遍历所有尚未访问的点进行DFS,此时如果DFS返回false代表有环,否则都遍历完返回trueDFS的核心逻辑DFS初始时标记当前的结点状态为0,遍历完所有邻居结点后状态设置为-1在遍历邻

2021-03-03 22:10:27 152 2

原创 【LeetCode199】-二叉树的右视图

实现思路总体思路是要压入节点及层数,层数其实就是该节点的父节点的层数+1实现代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : v

2021-03-03 14:59:11 82 2

原创 【刷题基础知识】-二叉树

二叉树层次遍历待更新…

2021-03-03 14:04:41 77

空空如也

空空如也

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

TA关注的人

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