![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
牛客力扣习题分析
主要是一些自己刷题遇到的问题,对问题的婆媳和代码思路,以及源码
Rea0916
你受的苦终将照亮夜行的路
展开
-
【牛客题解】 ——表示数值的字符串
表示数值的字符串思路:设置三个标志位sign表示是否含有正负号,symbol表示是否含有小数点,hasE表示是否含有e或者E(1)如果第i位是e或者E,那它一定不能是最后一个字符,将标志位hasE设为ture(2)如果第i位是 - 或者 + ,如果之前已经有 - 或者 +,那必须在e或者E的后面,如果不是的话就返回false;如果之前没有,判断是不是出现在第一位,如果不是第一位,那也必须在...原创 2020-05-07 20:56:30 · 202 阅读 · 0 评论 -
【C++】 ——剑指offer的矩阵问题
1、矩阵中的路径思路:题目很容易理解,给你一个字符串和一个字符矩阵,判断这个字符串是否在矩阵中。我们先用一个标志数组来判断该位置是否被访问过。1代表访问过,0表示没有求出元素的在数组的位置,index=i*cols+j;如果我们要用递归,那终止条件就是i,j小于0,要么就是i,j越界(超出cols和rows的范围),要么就是str[k]和数组元素不相等,要么就是数组的这个位置之前访问过。...原创 2020-05-02 15:45:40 · 170 阅读 · 0 评论 -
【C++】 ——最长无重复子串
最长无重复子串思路1:利用滑动窗口,先开辟一个数组,里面存放字符串中每个字符出现的次数。如果s[i]第一次出现,那就把窗口后沿向后移动,若s[i]出现第二次,就把它的计数减1,同时窗口前沿移动一位。#include<iostream>using namespace std;#include <string>#include <stdlib.h>#...原创 2020-05-01 21:43:07 · 627 阅读 · 0 评论 -
【剑指offer】——剪绳子
剪绳子(这段时间写了很多题,剑指offer快写完了,算法我真的…看到算法题就不想写,但是想了下,觉得自己不能一直这么逃避,该学的还得学,过程总是要经历的,就看了道关于动态规划的题)思路:当绳子的长度小于2的时候,就返回0;绳子长度等于2时,返回1(1x1=1);当绳子长度等于3,返回2(1x2=2);设dp[1]=1,dp[2]=2,dp[3]=3,(注意,这个数组不包含前面几种情况)剩下的...原创 2020-04-28 15:39:36 · 184 阅读 · 0 评论 -
【牛客题解】 ——之字形打印二叉树
之字形打印二叉树(我以为跟此次遍历二叉树一样那么简单,发现人家这个题貌似比层次遍历高一个level)思路:利用队列,队列中出一个元素,就把它的左右孩子带进去,不过先开始得设置一个标志位为false,表示他不是从左往右打印的,每一个层次遍历完,都改变falg的值,falg为false,那就翻转/*struct TreeNode { int val; struct TreeN...原创 2020-04-22 22:17:10 · 153 阅读 · 0 评论 -
【牛客题解】 ——判断一棵树是否为对称二叉树
判断一棵树是否为对称二叉树(对不起,我第一次做这个题的时候,写的太复杂了…不断的调用函数)思路一:先找出这个二叉树的镜像,再判断两个二叉树是否为同一个二叉树,但是这又涉及到一个问题,你得先把原来的二叉树保留下来,才能传到求镜像的函数,不然原来的树就改变了,所以要用另一个拷贝函数。/*struct TreeNode { int val; struct TreeNode *l...原创 2020-04-22 13:40:54 · 248 阅读 · 0 评论 -
【牛客题解】 ——正则表达式的匹配
正则表达式的匹配(我说大晚上看这个,锻炼人的思维…你信吗?)思路:1、两个都为空,返回真2、第一个为空,但是第二个不为空,返回假(如果第一个为空,但是第二个不空,是有可能返回真的,比如 “” 和 “.")3、pattern中当前位置的下一个不是“ * ”,如 bc 和 cd ,直接比较当前位置,能够匹配就继续配下一个,不匹配,直接返回false; 如果pattern的下一个是“ * ”...原创 2020-04-21 23:48:18 · 572 阅读 · 0 评论 -
【剑指offer】 ——构建乘积数组
构建乘积数组(我是一个没有感情的刷题机器)思路:把数字写一遍找出规律B[0] = A[1] *A[2] * A[3]…*A[n-1]B[1] = A[0] *A[2] * A[3]…*A[n-1]B[2] = A[0] *A[1] * A[3]…*A[n-1]看出来没?要是你要求B[i] ,后面的乘积就不要包含A[i]这一项了,当然意思就是说直接乘以1就好了。class Solut...原创 2020-04-21 15:57:02 · 142 阅读 · 0 评论 -
【数据结构】 ——删除链表中的重复节点(不保留重复节点)
删除链表中的重复节点(不保留重复节点)(剑指offer上面对这个题难度是4(总共五颗星),我寻思着,是我最近进步了?我觉得没那么难吧)说下我的思路:利用map存储链表节点的值和次数,遍历map,当map元素次数为1的时候,开辟一个新结点,将次数为1的值存储起来,挂到新链表中,最后返回新链表的头。这里要注意的是为了防止第一个和第二个就是重复节点,例如{1,1},我们在构造新链表的时候,最好加...原创 2020-04-20 19:12:26 · 409 阅读 · 0 评论 -
【牛客题解】 ——数组中重复的数字
(我觉得这个题很奇葩,所以写了,答案就返回了一个数字,不晓得为什么参数给的是int* 类型,满脸问号???并且要找的是数组中第一个重复的元素,意思就是说你找到重复数字,不仅要返回 true,还要把这个数字存到int* 的数组里面)思路:用map就很方便,first存放数据,second存放数字出现的次数class Solution {public: // Parameters: ...原创 2020-04-20 12:54:10 · 168 阅读 · 0 评论 -
【牛客题解】 ——把字符串转换成整数
这道题很简单,我昨天写的时候,没注意越界,第一次写用例只通过百分之八十五,我的天,查个越界查一个小时,算了,做出来就好,特别注意的是要先声明res为long long类型,不然就会越界思路:从后向前遍历字符串,直到遍历到str[0]停止,再单独判断str[0]class Solution {public: int StrToInt(string str) { ...原创 2020-04-20 12:05:08 · 234 阅读 · 0 评论 -
【牛客题解】 ——不用加减乘除做加法
不用加减乘除做加法思路1:第一步首先对两个数做异或操作(相同为0,不同为1),第二步计算进位,如果有进位,那就左移一位,和第一步所得的数继续做异或操作,直至进位为0;class Solution {public: int Add(int num1, int num2) { int temp; while(num2) { ...原创 2020-04-20 00:14:26 · 177 阅读 · 0 评论 -
【牛客题解】 ——圆圈中最后剩下的数
圆圈中最后剩下的数我发现我太笨了,只能用循环队列解决!!!解法一:class node { public: int num; node* next; node(int num) { this->num=num; } };class Solution {pu...原创 2020-04-19 01:03:23 · 160 阅读 · 0 评论 -
【LeetCode 78】 ——求子集 (两种解法)
求子集思路一:(一切尽在调试中,一个一个的把它带出来,我不知道咋说,反正就是那么个意思,但要注意的是最先开始要给存放结果的vector一个空间)class Solution {public: vector<vector<int>> subsets(vector<int>& nums) { vector<vect...原创 2020-04-16 23:55:26 · 297 阅读 · 0 评论 -
【C++】 ——全排列算法
关于全排列算法,分为两种:可重复的全排列和不包含重复的元素的全排列一、含重复元素的全排列算法思路:(1)n个元素的全排列=(n-1个元素的全排列)+(另一个元素作为前缀);(2)出口:如果只有一个元素的全排列,则说明已经排完(3)不断将每个元素放作第一个元素,然后将这个元素作为前缀,并将其余元素继续全排列,等待出口,出口出去后还需要还原数组#include <iostream&g...原创 2020-04-16 13:42:31 · 1409 阅读 · 2 评论 -
【牛客题解】 ——和为S的连续正数序列
和为S的连续正数序列(今天看这个题把我给看急了,我就觉得应该用回溯,结果半天没写出来,怀着无比难过和沉重的心情看了大家都管他叫左神的大佬的解题思路,我的天,聪明的人的脑子果真跟我长的不一样,这下更难过了,非得看懂自己写出来才肯睡觉,默默埋怨一句,我咋就没有这么聪明呢)思路:这个题其实就是一个等差数列的求和问题,大佬的解法是设置一个窗口,通过计算窗口前沿和后沿之间的数的和(题中说数字是连续的,...原创 2020-04-16 00:28:56 · 200 阅读 · 0 评论 -
【牛客题解】 ——数组中只出现一次的数字
数组中只出现一次的数字思路一:利用unordered_map,先把数组中的数字和次数放入map中,再次遍历数组,如果次数为1,则记录结果class Solution {public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { unordered_map<...原创 2020-04-15 18:49:37 · 213 阅读 · 0 评论 -
【牛客题解】 ——丑数
丑数(为啥我第一次看见这个题,感觉思路很简单,但就是写不出代码呢?总结了一句:就是菜,没有别的原因)思路:设置三个指针p2,p3,p5,初始值都为0设置一个存放丑数的数组vector v 的初始值为1等于说先开始就是这样的:存放丑数的数组为1乘以2的队列:2乘以3的队列:3乘以5的队列:5取队头最小的数为2,分别给每个队列的都增加一个数,就是这个最小数分别乘以2, 3,5...原创 2020-04-13 21:59:41 · 165 阅读 · 0 评论 -
【牛客刷题】 ——把数组排成最小的数
把数组排成最小的数思路:先把数组里面的数通过stringstream转成string类型的,再进行比较大小。最终返回一个stringclass Solution {public: static bool Compare(const string& s1,const string& s2) { string str1=s1+s2; ...原创 2020-04-13 18:30:31 · 146 阅读 · 0 评论 -
【牛客题解】 ——整数中1出现的次数
整数中1出现的次数思路一:迭代class Solution {public: int NumberOf1Between1AndN_Solution(int n) { int count=0; for(int i=1;i<=n;i++) { int temp=i; while(...原创 2020-04-13 13:07:33 · 158 阅读 · 0 评论 -
【牛客题解】 ——连续子数组的最大和
连续子数组的最大和代码:class Solution {public: int FindGreatestSumOfSubArray(vector<int> array) { if(array.size()==0) return 0; int sum=0; int max=-1000; ...原创 2020-04-12 00:34:03 · 157 阅读 · 0 评论 -
【LeetCode】 ——只有两个键的键盘(650)
只有两个键的键盘分析:注意以下几点:先开始已经有一个字符A,不支持部分复制,并且只能粘贴你上一次复制的字符思路:我们先写出前十项观察一下当n=1,return 0;n=2,return 2;n=3,return 3;n=4,return 4;n=5,return 5;n=6,return 5;n=7,return 7;n=8,return 6;n=9,return 9;...原创 2020-04-10 11:41:49 · 191 阅读 · 0 评论 -
【LeetCode】 ——翻转字符串里的单词(151)
题目描述看到这个题我以为跟我之前做的翻转字符串的题一样,要么是先整体翻转,再局部反转;要么是先截取字符串再翻转;后来发现我错了,这个题明显比刚才说的那个题高一个level,如果用之前那种方法写,测试用例只能过0.00%。所以这里有要注意的几点:翻转后的结果,字符串开头和结尾的不能包含空格若中间两个单词之间含有多个空格,只能保留一个空格。思路一:先把原来的字符串前面加上“ ”,从后向前...原创 2020-04-09 13:09:08 · 160 阅读 · 0 评论 -
【leetcode】 ——组合总和(39)
组合总和(力扣第39题)给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。 示例 1:输入: candidates = [2,3,6,7], target = ...原创 2020-04-07 00:07:50 · 144 阅读 · 0 评论 -
【C++】——牛客题解之 合并输入流
合并输入流题目很简单,但是做对很不容易(我可能太笨了,嘤嘤嘤)思路:因为题中说的输入使用空格隔开的,所以我们将输入的两个字符串,先根据空格分割开来,分别存入vector,接下来就要注意几点:1、字符串1已经输出结束,但是字符串2没有输出结束2、字符串2输出结束,但是1没有输出结束以下是代码:#include <iostream>#include <stdlib.h...原创 2020-04-05 00:18:41 · 162 阅读 · 0 评论 -
【C++】 ——牛客题解之判断是否为栈的弹出序列
题目描述思路:将数组中的元素压入栈中的同时,将栈顶元素和popV里面的元素进行比较,相等则出栈,不相等则继续入栈,直到元素全部入栈,最后判断栈中的元素是否为空,如果为空,则返回true,不为空返回false代码:class Solution {public: bool IsPopOrder(vector<int> pushV,vector<int> pop...原创 2020-04-02 20:16:39 · 235 阅读 · 0 评论 -
【C++】 ——牛客题解之简化Unix风格路径
题目描述(刚看到这个题的时候,我的脑子是蒙的,不知道他要让我们干啥,后来发现这跟Linux还是有点关系的)以下是思路(虽然很长,但是牛人的解法很容易理解):1、/表示根目录,linux/uinx下目录是成树结构的,根目录即树的根,不可能再继续向上了。2、. 表示当前目录。3、… 表示上级目录。4、/也用于目录间的分隔,如/a/b 表示根目录下的a路径下的b路径;a/b 表示当前目录下的...原创 2020-04-02 15:19:47 · 255 阅读 · 0 评论 -
【数据结构】——关于二叉树的刷题日记
1、判断一棵二叉树树是否为另一棵二叉树的子树class Solution{ bool IsSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { if (pRoot2 == NULL)//第二棵树遍历完,但是第一棵树没有遍历完返回真的 return true; if (pRoot1 == NULL)//第一棵树遍历完,但...原创 2020-04-01 18:45:21 · 158 阅读 · 0 评论 -
【数据结构】 ——单链表基础题【下】
1、单链表是否回文思路1:取出单链表的结点放入栈中,再进行一一比较思路2: 找出后半部分的元素入栈,在与前半部分的元素进行出栈比较思路一:class PalindromeList {public: bool chkPalindrome(ListNode* A) { ListNode* p=A; stack<int> list...原创 2020-03-28 15:18:39 · 182 阅读 · 0 评论 -
【C++】 --题解之查找兄弟单词、乒乓球筐问题、骆驼命名法
1、查找兄弟字符串题目看懂了吗?那现在我们就可以分析一下,第一次输入的数字是你即将要输入的n个字符串个数;第二步要输入的就是n个字符串;第三步输入的是你想要匹配的字符串;第四步的n就是你找出的兄弟字符串中的第m个代码奉上:#include<iostream>#include<string>#include<vector>#include<...原创 2020-03-19 21:22:37 · 266 阅读 · 0 评论 -
【C++】 --翻转字符串的两种方法
题目描述将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I输入描述:每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100输出描述:依次输出倒置之后的字符串,以空格分割示例1输入: I like beijing.输出: beijing. like I**思路:**先通过subs...原创 2020-03-15 22:30:17 · 1612 阅读 · 0 评论 -
【牛客题解】 --发邮件错排问题
1、题目描述NowCoder每天要给很多人发邮件。有一天他发现发错了邮件,把发给A的邮件发给了B,把发给B的邮件发给了A。于是他就思考,要给n个人发邮件,在每个人仅收到1封邮件的情况下,有多少种情况是所有人都收到了错误的邮件?即没有人收到属于自己的邮件。他给的测试用例和输入输出描述是这样的:我说这道题是典型的动态规划,没人反驳吧。题解n个邮件放入n个邮箱,我们用D(n)表示,那么D(n...原创 2020-03-12 22:45:43 · 371 阅读 · 0 评论 -
【数据结构】 --栈以及栈的应用(逆波兰表达式)
栈的定义栈是一种运算受限的线性表,是一种先进后出的数据结构,限定只能在一端进行插入和删除操作,允许操作的一端称为栈顶,不允许操作的称为栈底。顺序存储结构:1、元素所占的存储空间必须连续(这里的连续是指逻辑连续,而不是物理连续)2、元素在存储空间的位置是按照逻辑顺序存放的从上面可以很简明的看出栈的结构。栈的简单实现#include <iostream>#include ...原创 2020-02-24 23:30:56 · 211 阅读 · 0 评论 -
【Linux】--信号
信号 主要内容1.信号紧密相关的2.竞态条件 信号是什么?举个栗子,比如红绿灯,上下课的铃声等等,都是一个信号,向人们传递一个信息。在Linux下,信号是一个软件中断,通知进程发生了某个事件,中断当前进程正在执行的操作,去处理这个事件,信号就代表着事件。信号有多种,各自表示不同的事件。信号的生命周期:信号的产生,在进程中注册,信号的销毁,信号的处理 信号的种类:...原创 2019-12-07 22:26:25 · 105 阅读 · 0 评论 -
初识Linux以及其基础指令的使用
#1、什么是Linux?在开始之前,相信我们都听说过几种常见操作系统,DOS操作系统,Windows操作系统,Unix操作系统,以及Linux操作系统。现在我们就可以来讲讲Linux这个以高效性和灵活性著称的操作系统,它是基于源代码的方式进行开发的。是一套免费使用和自由传播的类似UNIX的操作系统,这个系统是全世界各地成千上万的程序员设计和实现的。它不仅支持多任务和多线程的操作,而且在大部分的...原创 2019-10-15 16:50:10 · 140 阅读 · 0 评论 -
const int *与int *const的区别
(这次又是隔了好久才开始动笔,真对不起我的开篇博客说的)常量指针与指向常量的指针int const* p //指向常量的指针const int* p //指向常量的指针int *const p //常量指针那么开头说的指向常量的指针与常量指针分别就是后两个了,以上三个是C语言中,不怎么常用的,但是当学到C++时,就很容易混淆,首先 const int* p和int const*...原创 2019-10-07 21:33:37 · 324 阅读 · 0 评论