自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

三年磨一剑

从低处开始,不断攀爬高峰

  • 博客(26)
  • 收藏
  • 关注

原创 股票问题一网打尽

1.股票问题的引入​ 股票问题是动态规划问题中的经典场景问题,在腾讯的笔试题目当中也出现过,在第五题的位置,所以特地参考了大神的通用解题思路来系统的复习,其中也会涉及到状态机的概念,其实也就是买卖股票的过程中会出现几种特定的状态,买和卖作为一种操作策略会使得问题的状态从S1变为S2。当然在解题过程中也需要想着说能否和背包问题一样做一些空间的压缩,从二维到一维,从O(n)到O(1)。​ 这里给出参考的文章地址:​ (1)国外股票问题高亮​ (2)国内优化版本文章2.通

2022-04-27 16:53:49 256

原创 华为牛客笔试题目汇总-动态规划

动态规划总结主要是记住几种非常普遍的题型就可以了: 背包、股票、子序列,分割、一维二维问题等,凡是局部最优能够推广到全局最优的情况就可以使用状态转移方程来处理。1、子数组的最大累加和问题解题分析:首先子数组的最大累加和问题可以采用很多种方法,一个是动态规划,一个是特殊的移动策略,一个是采用分治的手段(将一个数组分为三部分,一个是完全在左侧,一个是完全在右侧,一个是既有在左侧的部分,也有在右侧的部分)class Solution {public: /** * max sum of

2021-05-14 10:29:01 805 1

原创 华为牛客面试题目汇总-链表篇

总结首先华为牛客的面试题库是非常leetcode的,它的题目非常的常规,但是真正招实习生的时候,往往不是这么简单,笔试的题目设计的是真正的应用题,在这个时候,如何更好更完整的把题目的含义从中抽象出来才是问题的关键,所以到时候真的需要额外的去准备类似的题目,只是刷leetcode是不够的。链表1、反转链表输入一个链表,反转链表后,输出新链表的表头解题分析:这个时候我们就考虑这样的情况,有两个节点,一个是已经经过反转的头节点,一个是目前还没有反转的头节点,如何进行这两个节点的连接,已经移动到下一个

2021-05-14 08:41:56 570

原创 数学问题

巧解数学问题在这里放一个暴论:数学方法基本上就是编程类问题的最优解。所以做题的时候如果能够运用到数学的知识,会大大减少解题的复杂度。公因数和公倍数      使用辗转相除法可以求解两个数的最大公因数,从而根据两个数的最大公因数可以求出两个数的最小公约数。      这里介绍一下辗转相除法的原理以及简单的证明过程:     &nbs

2021-05-02 21:22:30 146

原创 位运算

位运算利用二进制运算的特性来进行一些优化。非常的神奇认识有哪些位运算符号^                按位异或&               按位与|   &nb

2021-04-29 13:57:35 44

原创 动态规划之五

字符串编辑问题的解释一般是针对于两个字符串,对于这两个字符串进行各种删除,增加,插入等操作来是的两个字符串相等。其实这里也是将两个字符串的匹配问题调整为两个字符串的子串的字符的操作问题,也就是第一个完整字符串的前i个字符和第二个字符串的前j个字符的操作问题,从而将问题转化为子问题,继而使用动态规划的方法来进行求解,一般此类问题无法使用之前提到的滚动数组的方法来进行空间压缩。经典算法题目leetcode 77 编辑距离给你两个单词 word1 和 word2,请你计算出将 word1 转换成 wo

2021-04-27 19:11:52 38

原创 动态规划之四 股票问题

这里直接是粘贴两篇文章来做一下记录,一篇是国外社区的解答,一篇是对应的翻译,确实收益匪浅国外解答国内翻译

2021-04-27 00:01:54 165

原创 动态规划整理之三 背包问题

网上有很多的这方面的知识了,所以在这里我主要是复制集合这些算法思想,希望能够加深自己的学习印象,下面写的太全面了,我就直接列出:主要参考的就是《leetcode 101》和这篇知乎的内容再结合一下我做题的心得知乎文章链接背包问题九讲...

2021-04-25 21:41:36 86

原创 动态规划整理之二

动态规划整理之二分割类子问题leetcode 91解码方法一条包含字母 A-Z 的消息通过以下映射进行了 编码 :‘A’ -> 1 ‘B’ -> 2 … ‘Z’ -> 26要 解码已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,“11106” 可以映射为: “AAJF” ,将消息分组为 (1 1 10 6) “KJF” ,将消息分组为 (11 10 6) 注意,消息不能分组为 (1 11 06) ,因为"06" 不能映射为 “F” ,这

2021-04-25 18:05:41 72

原创 动态规划整理之一

动态规划整理之一算法解释      动态规划是一种自下而上的寻优遍历,它只能运用于有最优子结构的问题,就是说能够分解为局部的子问题来求解的问题。      需要注意的是。动态规划和其他的深度/广度优先遍历一样都是将问题拆分为子问题来解决的。其中最本质的区别就在于动态规划在解决子问题的过程当中会不断的记录子问题的解,从而相比于递归,避免了大量的重复子问题的问题。而动态问题处理的关键就在

2021-04-24 19:49:32 227 1

原创 广度优先搜索

广度优先搜索广度优先搜索      不同于深度优先搜索的纵深搜索,广度优先搜索是一层一层的向外搜索的,拿一个图举例子就是,我们首先是要遍历一个节点的与之相连的所有的一层节点,然后就是从与当前节点相连的那一层节点中不断得取出节点进行一遍这个操作,所以在这个操作之中,我们需要用先进后出得队列来进行遍历。      口述算法的流程就是:    &n

2021-04-23 18:05:46 132

原创 回溯法

回溯法算法解释      回溯法是优先遍历搜索的一种特殊情况,又称为试探法。常常用于需要记录节点状态的深度优先搜索。      通常来说,一般对于排列、组合、选择类问题使用这个方法比较方便,也就是说它是采用试错的思想来尝试性的分步解决问题。      具体的,在搜索到某一个节点的时候,如果我们发现目前的节点不是需求的目标的

2021-04-21 16:11:09 107

转载 CSDN空格

csdn里面按Tab键或者空格是不能展示出来的,只能使用如下字符.      

2021-04-20 15:12:13 88

原创 深度优先搜索

深度优先搜索算法解释      深度优先搜索(depth-first search,DFS)在搜索到一个新的未曾访问过的节点之后,立刻对于当前的节点进行遍历;因此可以使用递归来实现,相应的很自然的也就可以使用先进后出的栈来实现。对于数或者图而言,由于总是遍历新的节点,所以总是向着更深处前进。      一般来说,深度优先搜索类型的题可以分为主函数和辅函数,主函数用于遍历所有的位置,也

2021-04-20 14:56:28 82

原创 排序算法的详细总结(附上代码讲解)

总体的介绍排序算法是非常重要也非常基础的算法,可以分为简单选择排序、直接插入排序、冒泡排序、希尔排序、堆排序、快速排序,归并排序,基数排序等。c++内置的sort()函数是集成了多种排序的方法,会按照输入的数组的规模选择不同的在测试中表现得更好得排序算法,所以一般来说它的效果是优于单一的某个排序算法的。对于面试,我们应该着重熟练的掌握快速排序,其他排序算法需要能够手撕。Nlog(N)常用的排序算法快速排序快速排序也是交换排序的一种,其基本原理是:将未排序的元素根据一个作为基准的主元分为两个子序列,其

2021-04-19 16:49:07 120

原创 二分查找:双指针的特殊化版本

二分查找:双指针的特殊化版本算法解释二分查找常称为二分法或折半查找,每次查找时通过将待查找区间分为俩个部分并通过一个判断的法则来读取一部分的内容继续查找,将查找的复杂度大大降低。将一个长度为O(n)的数组,二分查找的时间复杂度时O(log(n))注意事项一定一定一定要注意区间的闭合关系,确定是左闭右开还是左开右闭还是别的法则,注意c++中的lower_bound和upper_bound函数。具体的实例leetcode 34给定一个按照升序排列的整数数组 nums,和一个目标值 target。找

2021-04-15 22:37:26 116

原创 双指针及其延伸问题汇总

第二部分:双指针及其延伸问题汇总1、主要涉及的一些思想(1)双指针主要是用于遍历数组,二叉树,甚至是图等结构,两个指针指向不同的元素,协同完成任务,当然也可以延伸到多指针的使用。(2)当两个指针指向同一个数组,遍历方向相同且不会相交,移动的速度相同,也就是说这两个指针的相对位置不会发生改变,这也就是滑动窗口问题。(3)两个指针指向同一个数组,遍历方向相同,但是移动的速度不同,这也就是快慢指针问题,可以快速找到链表的中点,三分点等等分点(4)两个指针指向同一个数组但是方向相反,这样的问题一般针对的都

2021-04-15 09:26:44 101

原创 PAT 1009 Product of Polynomials (25 分)

PAT 1009 Product of Polynomials (25 分)多项式链表的乘积用链表L1的每一个节点和链表L2的每一个节点相乘之后进行加和,生成新的结果链表具体代码#include<iostream>#include<malloc.h>#include<iomanip>using namespace std;typedef struct node* Node;struct node{ int exp; float cof; Nod

2021-02-13 18:37:11 72

原创 PAT 1008 Elevator (20 分)

1008 Elevator (20 分)简单题,读懂题目就好具体代码#include<iostream>#include<vector>using namespace std;int main(){ int n; int sum = 0; cin >> n; vector<int> v(n+2); v[0] = 0; for (int i = 1; i <=n; i++) { cin >> v[i]; }

2021-02-13 18:31:18 49

原创 PAT 1007 Maximum Subsequence Sum (25 分)

1007 Maximum Subsequence Sum (25 分)经典题具体代码#include<iostream>#include<malloc.h>using namespace std;#define maxsize 100001int main(){ int n; int number[maxsize + 1]; bool flag = true; int max = 0;//记录整个比较过程中的最大值 int tmp = 0;//短暂的记录变

2021-02-13 18:29:33 99

原创 PAT 1006 Sign In and Sign Out (25 分)

PAT 1006 Sign In and Sign Out (25 分)#include<iostream>#include<malloc.h>using namespace std;int main(){ string come_time, leave_time; //设置初始值 string min = "23:59:59"; string max = "00:00:00"; string name; string name1,name2; int

2021-02-13 18:11:55 43

原创 PAT 1005 Spell It Right (20 分)

1005 Spell It Right (20 分)思路分析主要是由于输入的整数过大,超出了整数型定义的类型,所以将它转化为字符型来处理具体的代码#include<iostream>#include<malloc.h>#include<string>#include<sstream>//将整型转化为字符串类型using namespace std;int main(){ string s[10]; string s1,s2; str

2021-02-13 18:07:35 60

原创 PAT 1004 Counting Leaves (30 分)

PAT 1004 Counting Leaves (30 分)思路分析1、主要做的就是如何存储整个树的信息,要知道本题的树并非是常规的二叉树2、可以考虑采用 struct node【maxsize】来整体记录3、需要注意的是M行的父节点数字并非是按照顺序给出的,可以是乱序的状态具体的代码展示#include<iostream>#include<malloc.h>#include<vector>using namespace std;//首先是采用一个结

2021-02-13 14:08:10 62

原创 PAT 1003 Emergency (25 分)

1003 Emergency (25 分)易错点以及思路的梳理总体上来说就是dijkstra算法的变形,也就是说原始的版本判断是否是加入边的时候,只是考虑到达源点的距离大小来进行更新,在本题中加入了第二条判断法制,也就是考虑该城市的队伍数量。具体来说1、记录不同的最短路径2、在选取的路径长度相同时,进一步考虑所能召集的城市队伍数量代码展示#include<iostream>#include<malloc.h>#include<iomanip>#incl

2021-02-08 22:50:50 55

原创 1002 A+B for Polynomials (25 分)

1002 A+B for Polynomials (25 分)难点分析1.要考虑到当输入项的指数相同的时候,其系数相加有可能为零2.当你对两个链表继续提取的时候,在循环处理中,你要处理好有可能有一个链表提前就移动到尾部了3.在这里有一个特殊的语法,也就是在c++中如何保留到小数点后一位头部库是 #include<iomanip> 具体的语法是 cout.setf(ios::fixed);cout << " " << setprecision(1) <&l

2021-02-05 22:25:39 155 1

原创 1001 A+B Format (20 分)

1001 A+B Format (20 分)整体的梳理主要是对于整形的数字如何快速且简单的输出其数位上的数字,并且合理的将加和的结果以三个字符为一个片段输出完整的题目介绍1.contentCalculate a+b and output the sum in standard format -- that is, the digits must be separated into groups of three by commas (unless there are less than four

2021-02-05 12:43:41 67

空空如也

空空如也

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

TA关注的人

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