自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 牛客题霸 [矩阵的最小路径和] C++题解/答案

牛客题霸 [矩阵的最小路径和] C++题解/答案、题目描述给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。题解:dp[i]:表示到达第i行所需要的的最短路径对于第一列,只能从上往下对于第一行,只能从左往右对于非第一行第一列的位置,到达有两个办法,从该点的左侧过来或者从上侧过来,取最小即可,然后加当前值代码:class Solution {public: /**

2020-11-24 17:39:00 37

原创 牛客题霸 [ 判断一棵二叉树是否为搜索二叉树和完全二叉树] C++题解/答案

牛客题霸 [ 判断一棵二叉树是否为搜索二叉树和完全二叉树] C++题解/答案题解:搜索二叉树满足以下性质:1.非空左子树的所以键值小于其根节点的键值2.非空右子树的所有键值大于其根节点的键值3.左,右子树都是二叉搜索树完全二叉树:如果二叉树的深度为k,则除第k层外其余所有层节点的度都为2,且叶子节点从左到右依次存在叶子节点高度差距不为1或0肯定不是完全二叉树当左右叶子节点的值大于根节点,肯定不是搜索二叉树代码:/** * struct TreeNode { * int val;

2020-11-24 17:27:26

原创 牛客题霸 [ 最小的K个数] C++题解/答案

牛客题霸 [ 大数乘法] C++题解/答案题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。题解:如果有n<k的就输出空vector然后对input进行排序,取前k个值代码:class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { vector

2020-11-24 17:05:46

原创 牛客题霸 [ 寻找峰值] C++题解/答案

牛客题霸 [ 大数乘法] C++题解/答案题目描述山峰元素是指其值大于或等于左右相邻值的元素。给定一个输入数组nums,任意两个相邻元素值不相等,数组可能包含多个山峰。找到索引最大的那个山峰元素并返回其索引。假设 nums[-1] = nums[n] = -∞。题解:题目要求找最大的山峰元素,我们直接倒序查找就行,如果找到直接输出,,如果没有就返回0代码:class Solution {public: /** * 寻找最后的山峰 * @param a int整型一

2020-11-24 16:59:52

原创 牛客题霸 [ 大数乘法] C++题解/答案

牛客题霸 [ 大数乘法] C++题解/答案题目描述以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。(字符串长度不大于10000,保证字符串仅由’0’~'9’这10种字符组成)题解:高精度问题的基本模板本质就是模拟手算乘法的过程,先乘对应位,然后%10进位虽然是模板,但是我调了好久。。不知道哪错了代码:class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 *

2020-11-24 16:56:05 10

原创 牛客题霸 [ 有重复项数字的所有排列] C++题解/答案

牛客题霸 [ 孩子们的游戏] C++题解/答案题目描述给出一组可能包含重复项的数字,返回该组数字的所有排列。题解:很多人应该都是用的递归方式来做,这里介绍一个stl的next_permutation在头文件里,可以产生全排列next_permutation()是按照字典序产生排列的,并且是从数组中当前的字典序开始依次增大直至到最大字典序所以我们第一步先排序,按照从小到大,然后一遍全排列一边存入vector内代码:class Solution {public: vector<

2020-11-24 16:36:06 9

原创 牛客题霸 [ 孩子们的游戏] C++题解/答案

牛客题霸 [ 孩子们的游戏] C++题解/答案题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(

2020-11-21 12:04:50 10

原创 牛客题霸 [比较版本号] C++题解/答案

牛客题霸 [比较版本号] C++题解/答案题目描述如果version1 > version2 返回1,如果 version1 < version2 返回-1,不然返回0.输入的version字符串非空,只包含数字和字符.。.字符不代表通常意义上的小数点,只是用来区分数字序列。例如字符串2.5并不代表二点五,只是代表版本是第一级版本号是2,第二级版本号是5.题解:将小数点之前的转化成数num1.如果num1一样,依次比小数点后面的代码:class Solution {public:

2020-11-21 12:00:29 6

原创 牛客题霸 [矩阵乘法] C++题解/答案

牛客题霸 [矩阵乘法] C++题解/答案题目描述给定两个nn的矩阵A和B,求AB。题解:都学过矩阵相乘把,[i][k]=[i][j]*[j][k]代码:class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param a int整型vector<vector<>> 第一个矩阵 * @param b int整型vector<ve

2020-11-21 11:56:56 11

原创 牛客题霸 [顺时针旋转矩阵] C++题解/答案

牛客题霸 [顺时针旋转矩阵] C++题解/答案题目描述有一个NxN整数矩阵,请编写一个算法,将矩阵顺时针旋转90度。给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于300。题解:根据题目要求,先将同一列的第i行与第n-1-i行互换,再按照对角线互换代码:class Rotate {public: vector<vector<int> > rotateMatrix(vector<vector<int> > m

2020-11-21 11:52:07 22

原创 牛客题霸 [判断回文] C++题解/答案

牛客题霸 [分糖果问题] C++题解/答案题目描述给定一个字符串,请编写一个函数判断该字符串是否回文。如果回文请返回true,否则返回false。题解:左右两端同时向中间缩代码:class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param str string字符串 待判断的字符串 * @return bool布尔型 */ bool

2020-11-19 23:17:24 10

原创 牛客题霸 [分糖果问题] C++题解/答案

牛客题霸 [分糖果问题] C++题解/答案题目描述一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下:每个孩子不管得分多少,起码分到一个糖果。任意两个相邻的孩子之间,得分较多的孩子必须拿多一些糖果。(若相同则无此限制)给定一个数组arr代表得分数组,请返回最少需要多少糖果。[要求]时间复杂度为On, 空间复杂度为O1题解:正着来一遍,倒着来一遍根据大小关系递归赋值代码:class Solution {public: /** * pick candy

2020-11-19 23:05:54 8

原创 牛客题霸 [有关阶乘的两个问题1] C++题解/答案

牛客题霸 [有关阶乘的两个问题1] C++题解/答案题目描述给定一个非负整数N,返回N!结果的末尾为0的数量题解:这个题有技巧10=2*5,也就是说有一对2和5就会贡献一个0,但是2的数量远远大于5,所以只用统计五即可代码:class Solution {public: /** * the number of 0 * @param n long长整型 the number * @return long长整型 */ long long t

2020-11-19 22:22:32 37

原创 牛客题霸 [丑数] C++题解/答案

牛客题霸 [丑数] C++题解/答案题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。题解:丑数可以分解成2x * 3y * 5z丑数乘2,3,5就可以得到新的丑数,依次赋值就可代码:class Solution {public: int GetUglyNumber_Solution(int index) { int p2 =0

2020-11-19 22:17:58 6

原创 牛客题霸 [二进制中1的个数] C++题解/答案

牛客题霸 [二进制中1的个数] C++题解/答案题目描述输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。题解:判断1的个数x&(-x)=2^k有点类似于树状数组中lowbit的操作代码:class Solution {public: int NumberOf1(int n) { int res=0; while(n) { n=n&(n-1);

2020-11-19 22:12:22 5

原创 牛客题霸 [矩阵查找] C++题解/答案

牛客题霸 [矩阵查找] C++题解/答案题目描述请写出一个高效的在m*n矩阵中判断目标值是否存在的算法,矩阵具有如下特征:每一行的数字都从左到右排序每一行的第一个数字都比上一行最后一个数字大例如:对于下面的矩阵:[[1, 3, 5, 9],[10, 11, 12, 30],[230, 300, 350, 500]]要搜索的目标值为3,返回true;题解:矩阵是排好序的,直接从左上开始根据大小找即可代码:class Solution {public: /**

2020-11-19 22:05:51 12

原创 牛客题霸 [最长公共子序列] C++题解/答案

牛客题霸 [最长公共子序列] C++题解/答案题目描述给定两个字符串str1和str2,输出连个字符串的最长公共子序列。如过最长公共子序列为空,则输出-1。题解:dp经典问题代码:class Solution {public: /** * longest common subsequence * @param s1 string字符串 the string * @param s2 string字符串 the string * @return st

2020-11-19 22:01:23 33

原创 牛客题霸 [括号生成] C++题解/答案

牛客题霸 [括号生成] C++题解/答案题意:给出n对括号,请编写一个函数来生成所有的由n对括号组成的合法组合。例如,给出n=3,解集为:“((()))”, “(()())”, “(())()”, “()()()”, “()(())”,题解:回溯法当左括号少于n时就添加做括号右括号数量小于左括号数量时继续添加右括号代码:class Solution {public: /** * * @param n int整型 * @return string

2020-11-19 21:50:19 5

原创 牛客题霸 [ 排序] C++题解/答案

题目描述给定一个数组,请你编写一个函数,返回该数组排序后的形式。题意:排序的方式有很多二分呀,桶排呀归并等等stl里的sort快速排序方便好用题解:class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 将给定数组排序 * @param arr int整型vector 待排序的数组 * @return int整型vector */ vector&

2020-11-16 14:26:56 12

原创 牛客题霸 [ 最长递增子序列] C++题解/答案

牛客题霸 [ 最长递增子序列] C++题解/答案题目描述给定数组arr,设长度为n,输出arr的最长递增子序列。(如果有多个答案,请输出其中字典序最小的)题意:直接暴力会超时应该用二分+贪心题解:class Solution {public: /** * retrun the longest increasing subsequence * @param arr int整型vector the array * @return int整型vector

2020-11-16 14:25:08 13

原创 牛客题霸 [ 求二叉树的层序遍历] C++题解/答案

题目描述给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)例如:给定的二叉树是{3,9,20,#,#,15,7},该二叉树层序遍历的结果是[[3],[9,20],[15,7]]代码:/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution {public: /** *

2020-11-16 14:20:19 7

原创 牛客题霸 [找到字符串的最长无重复字符子串] C++题解/答案

题目描述给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同)。题解:i和j两个指针分别指不重复子串的两端,根据情况各自移动,记录最大值即可代码:class Solution {public: /** * * @param arr int整型vector the array * @return int整型 */ int maxLength(vector<int>& arr) {

2020-11-16 14:13:16 7

原创 牛客题霸 [ 最长回文子串] C++题解/答案

牛客题霸 [ 最长回文子串] C++题解/答案题目描述对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。给定字符串A以及它的长度n,请返回最长回文子串的长度。题解:两个方法:一个是经典暴力,这个大家应该都会还一个是manacher(马拉车)马拉车是专门处理回文串的算法介绍两个变量id:回文子串的中心位置mx:回文子串的最后位置p[i] = min(mx-i, p[2 * id - i])p[i]:以i为中心的回文半径长度当前,我们已经得到了 p[0…i-1]

2020-11-09 18:30:26 15

原创 牛客题霸 [螺旋矩阵] C++题解/答案

牛客题霸 [螺旋矩阵] C++题解/答案题目描述给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。题解:其实就是模拟过程,先往左走,走到头向下走,到头后向左走,再向上走一直循环过程代码:class Solution {public: vector<int> spiralOrder(vector<vector<int> > &matrix) { vector<int> ret;

2020-11-09 18:25:21 10

原创 牛客题霸 [ 岛屿数量] C++题解/答案

牛客题霸 [ 岛屿数量] C++题解/答案题目描述给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。题解:人傻了,调了半小时没调出来。。难倒是不难其实就是dfs然后标记附近的岛屿,如果附近所有岛屿都被标记了,就count++然后看还有其他的岛屿,挺常规的代码:class Solution {private: int d[5]={-1,0,1,0,-1}

2020-11-09 18:21:53 41

原创 牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案

牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案题目描述给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。题解:我们想想最近公共祖先节点满足什么要求??o1和o2分别位于这个节点的两个子树里也就说,如果存在一个节点,从左子树出发能找到o1或o2,从右子树出发也能找到,那就说明这个节点就是最近公共祖先节点但是注意特殊情况,因为有可能全部在左子树,或者右子树,那最近公共祖先点就是他们本身(离根更近的那个)代码:/** *

2020-11-09 17:58:55 23

原创 牛客题霸 [寻找第K大] C++题解/答案

牛客题霸 [寻找第K大] C++题解/答案题目描述有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。题目:利用快排+二分题解:class Finder {public: int findKth(vector<int> a, int n, int K) { // write code here、 return find(a,0,n-

2020-11-09 17:47:56 13

原创 牛客题霸 [括号序列] C++题解/答案

牛客题霸 [括号序列] C++题解/答案题目描述给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。题解:用栈来做用栈来存每个符号的左边,当出现符号右边时,看栈的顶部是否为该符号的左边,如果不能匹配则返回0,能匹配则将栈顶pop全部结束时栈应该是空的,否则返回0注意:题目给的数据有可能会先输入符号的右部分,所以当栈为空时也应该压入

2020-11-09 17:31:09 37

原创 牛客题霸 [两个链表的第一个公共结点] C++题解/答案

牛客题霸 [两个链表的第一个公共结点] C++题解/答案题目描述输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)题解:可以理解成两个数组找第一个公共节点就是两个for循环,从第一个数组的第一位开始与第二个数组的第一位开始判断是否相同,然后比第二个数组的第二位,一直这样进行但这里是链表,所以一开始没跑完第二个链表,就要重新回到起点即list2 = pHead2;详细看代码代码:/*struct ListNo

2020-11-09 17:31:04 7

原创 牛客题霸 [ 实现二叉树先序,中序和后序遍历]C++题解/答案

牛客题霸 [ 实现二叉树先序,中序和后序遍历]C++题解/答案题目描述分别按照二叉树先序,中序和后序打印所有的节点。题解:先序,中序,后序都是按照各自规律的先序的遍历顺序是中前后中序是前中后后序是前后中这个决定了递归的顺序比如先序:先存当前节点然后遍历左子树最后遍历右子树中序:先遍历左子树保存节点再遍历右子树代码:/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNod

2020-11-09 17:30:17 67

原创 牛客题霸 [ 大数加法]C++题解/答案

牛客题霸 [ 大数加法]C++题解/答案题解:本质就是模拟加法运算想要让s与t长度统一,不足的部分用0来补充然后从最后一位开始,两个数相加,同时如果超过10,就把多的部分加到下一位其实就是我们小学在草稿纸上运算加法的过程,逢10进1代码:class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算两个数之和 * @param s string字符串 表示第一个整数

2020-11-09 17:22:08 10

原创 牛客题霸 [最长公共子串]C++题解/答案

牛客题霸 [最长公共子串]C++题解/答案

2020-11-09 16:33:07 39

原创 牛客题霸 [用两个栈实现队列] C++题解/答案

题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。题解:我们都知道栈的性质是先进后出,队列是先进先出我们用两个栈来模拟出队列可以先用一个栈来存数,当要输出时,最上面的是最晚进栈的,我们将所有数存到另一个栈内,这样就使得第二个栈的顶部是最早输入的数,就可以实现先进先出代码:class Solution{public: void push(int node) { stack1.push(node); } int

2020-11-08 22:52:53 10

原创 牛客题霸 [合并有序链表] C++题解/答案

牛客题霸 [合并有序链表] C++题解/答案题目描述将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的。题解:首先判断l1和l2是否为空然后依次比较l1和l2的值,然后存到新的链表里,当有一方全部结束时,另一部分剩下的所有直接连在链表后面代码:/** * struct ListNode { * int val; * struct ListNode *next; * }; */class Solution {public: /** *

2020-11-08 22:52:14 10

原创 牛客题霸 [跳台阶] C++题解/答案

牛客题霸 [跳台阶] C++题解/答案题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。题解:递归的入门题如果只剩一个台阶,只有一种跳法(一步)如果还剩两个台阶,有两种跳法(两个一步或者一个两步)当有n个台阶,可以转化成n-1和n-2两种情况的和依次递归下去,边界就是n = = 1和n = = 2代码:class Solution {public: int jumpFloor(int number) {

2020-11-08 22:51:23 8

原创 牛客题霸 [数组中只出现一次的数字] C++题解/答案

牛客题霸 [数组中只出现一次的数字] C++题解/答案题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。题解:用map来记录每个数字出现几次,然后再循环一遍看哪个数字出现一次,赋给num1和num2就行还有个高级做法是用位运算,异或^,这里就不细讲了代码:class Solution {public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2)

2020-11-08 22:49:51 122

原创 牛客题霸 [求平方根] C++题解/答案

牛客题霸 [求平方根] C++题解/答案题目描述实现函数 int sqrt(int x).计算并返回x的平方根题解:要求返回平方根,我们就找一个i,使得ii<=x&&(i+1)(i+1)>x这样的i就是我们要找的答案注意,x有可能为负数,当<=0时返回0代码:class Solution {public: /** * * @param x int整型 * @return int整型 */ int

2020-11-08 22:49:11 8

原创 牛客题霸 [子数组的最大累加和问题] C++题解/答案

牛客题霸 [子数组的最大累加和问题] C++题解/答案题目描述给定一个数组arr,返回子数组的最大累加和例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.[要求]时间复杂度为O(n)O(n),空间复杂度为O(1)O(1)题解:我们从前向后推,如果当前值加上前一个值小于当前值,那我们就不加了,如果大于我就加上,这样维护的是每个位置所能累加的最大值,我们在这个过程中用maxx取最大情况代码:clas

2020-11-08 22:48:20 11

原创 牛客题霸 [反转字符串] C++题解/答案

牛客题霸 [反转字符串] C++题解/答案题目描述写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)题解:有reverse现成的翻转函数,直接套进去就可以如果不用函数的话,也不难,倒着循环str,存入新的string内就行代码:class Solution {public: /** * 反转字符串 * @param str string字符串 * @return string字符串 */ str

2020-11-08 22:47:15 10

原创 牛客题霸 [合并两个有序的数组] C++题解/答案

牛客题霸 [合并两个有序的数组] C++题解/答案题目描述给出两个有序的整数数组 和 ,请将数组 合并到数组 中,变成一个有序的数组注意:可以假设 数组有足够的空间存放 数组的元素, 和 中初始的元素数目分别为 和题目描述给出两个有序的整数数组A 和B ,请将数组B 合并到数组A 中,变成一个有序的数组注意:可以假设 A数组有足够的空间存放B 数组的元素, A和B 中初始的元素数目分别为 m和n题解:将A和B从最后一位开始比,然后存入A中(下标从第m+n-1倒着开始)。当有一个用完后,将

2020-11-08 22:45:54 13

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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