![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
每日一题
赟家小菜鸟
这个作者很懒,什么都没留下…
展开
-
力扣137.只出现一次的数字II
题目:biubiu一:class Solution {public: int singleNumber(vector<int>& nums) { sort(nums.begin(),nums.end()); for(int i=0;i<nums.size()-1;i+=3){ if(nums[i]!=nums[i+1]){ return nums[i];原创 2021-12-08 15:51:48 · 152 阅读 · 0 评论 -
力扣.90子集II
题目:biubiu题意:给出一个数组,然后数组含有重复的元素,现在求数组的子集。递归循环:#include<iostream>#include<string>#include<vector>#include<cmath>#include<map>#include<unordered_map>#include<stack>#include<algorithm>using namespace s原创 2021-11-20 19:52:49 · 968 阅读 · 0 评论 -
力扣89.格雷编码
题目:biubiu题意:希望得到一个序列,然后要求:这种题第一种想法就是找到一种符合所有条件的规则,然后没有找到,还是看的别人的题解。#include<iostream>#include<string>#include<vector>#include<cmath>#include<map>#include<unordered_map>#include<stack>#include<algorith原创 2021-11-20 13:24:12 · 548 阅读 · 0 评论 -
力扣87.扰乱字符串
题目:biubiu题意:给定两个字符串,要求就是只能对一个字符串进行分割,分割成两个子串,然后两个子串可以交换,例如s1分割成s11和s12两个子串,两个子串可以s11+s12也可以s12+s11,两个子串可以继续相同的操作,问,现在s1==s2是否为真。对字符串的操作其实非常简单,就是切割然后判断是否交换,其子串也可以继续切割,就涉及到了递归。官方题解代码:#include<iostream>#include<string>#include<vector>原创 2021-11-19 16:33:56 · 757 阅读 · 0 评论 -
力扣85.最大矩形
题目:biubiu题意:给一个二维矩阵,存的是1和0,求1可以构成的最大矩形。思维转换,力扣84柱状图的最大矩形的变换。class Solution {public: int largestRectangleArea(vector<int>& heights) { int n = heights.size(); vector<int>l(n), r(n,n); stack<int>p; for (int i = 0; i < n;原创 2021-11-18 19:40:40 · 410 阅读 · 0 评论 -
力扣84.柱状图中最大的矩形
题目:biubiu题意:给出连续的长柱,求出长柱构成的最大矩形的面积。构成矩形如果左边的矩形比较高,那么左边这一个柱就可以合并,如果左边出现一个低于,那么这个柱就是界限,同样找到右边的界限,然后就可以找到矩形面积。如何找两边的界限,可以使用单调栈。#include<iostream>#include<string>#include<vector>#include<cmath>#include<map>#include<uno原创 2021-11-18 18:16:19 · 221 阅读 · 0 评论 -
力扣76.最小覆盖子串
题目:biubiu题意:在字符串中找到最小的覆盖单词的子串,覆盖要求含有单词的全部字符。通过滑动窗口实现。移动右指针找到符合条件的子串,移动左指针来使最小。#include<iostream>#include<string>#include<vector>#include<cmath>#include<map>#include<unordered_map>#include<stack>#include&l原创 2021-11-16 16:55:15 · 483 阅读 · 0 评论 -
力扣72.编辑距离
题目:biubiu题意:给两个单词word1和word2,可以对word1的某一个字符进行插入、删除、替换,问需要多少步可以将word1转成word2,dfs递归暴力:#include<iostream>#include<string>#include<vector>#include<stack>#include<algorithm>using namespace std;class Solution {public: voi原创 2021-11-15 20:36:10 · 411 阅读 · 0 评论 -
力扣71.简化路经
题目:biubiu题意:根据题意处理一个字符串。我使用的栈进行处理,后面的子串有可能对前面的子串产生影响,可以使用栈先进后出的特性。然后进行遍历处理相应的情况。注意: 使用栈,当你面对其中一种情况需要判断前一个子串也就是栈头元素时,一定要考虑栈是否为空,对栈中元素进行一个预判,防止空栈进行元素操作。代码:#include<iostream>#include<string>#include<vector>#include<stack>#inc原创 2021-11-15 11:34:52 · 84 阅读 · 0 评论 -
力扣68.文本左右对齐
题目:biubiu题意: 给一个单词数组,然后给一个句子的长度,现在让你把这些单词组合成句子,在单词之间插入空格,最后一个句子是特殊情况,只有最后一个句子的最后是空格。直接遍历就可以,然后就需要处理一些小细节,例如这个句子只有一个单词,然后就是空格的插入。#include<iostream>#include<string>#include<vector>#include<stack>#include<algorithm>using原创 2021-11-14 18:27:58 · 171 阅读 · 0 评论 -
力扣51.N皇后
题目:biubiu题意:在nXn的棋盘中放n个皇后,要求n个皇后不能相互攻击,在提示中指出,两个皇后不能相同行相同列,并且不能再同一条斜线上,这个题不难,但是要认真,这个题只需要用深搜,进行递归回溯就行,但是在回溯的时候一定要注意一个小细节,你是如何标记不能再同一条斜线上的,我用的一个二维数组,将这个皇后的下方斜线全都标记,但是这就有一种可能,两条斜线会有相交的点,如果你直接标记为1,回溯直接回溯成0,那就有可能会造成一点的其他斜线的忽略,所以标记的时候不要直接标记为1,可以进行++,这样某一个点回溯的时原创 2021-11-11 20:43:00 · 399 阅读 · 0 评论 -
力扣49。字母异位词分组
题目: biubiu题意:给一个字符串数组,然后找出字母个数相同的字符串。字母个数相同可以对字符串进行排序然后比较判断,但是暴力就需要两层循环O(n^2),时间超限代码展示:class Solution {public: vector<vector<string>> groupAnagrams(vector<string>& strs) { vector<vector<string>>ans;原创 2021-11-11 18:35:51 · 231 阅读 · 0 评论 -
力扣37.解数独
题目: biubiu题意:给一个残缺的数独,要求填入数字1~9,然后满足行和列1 ~ 9只能出现一遍,99的数独又分成了33的小数独,保证小数独里面1 ~ 9也只出现一遍。思路:采用深搜dfs,首先记录一下已经出现过的数字标记为1,然后就可以递归暴力将剩余的数字放进去,知道满足条件即可。#include<iostream>#include<vector>#include<algorithm>#include<map>using namespace原创 2021-11-09 16:28:39 · 309 阅读 · 0 评论 -
力扣30.串联所有单词的子串
题目:传送门题意:给定一个字符串 s 和一些 长度相同 的单词 words 。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。暴力:#include<iostream>#include<vector>#include<cmath>#include<string>#include<map>#include<cstdio>using namespace std;class Solution {p原创 2021-11-06 19:40:23 · 145 阅读 · 0 评论 -
力扣23.合并k个升序链表
题目: 传送门题意: 给k个升序链表,合并成一条升序链表方法一:根据力扣21合并两个升序链表,然后遍历k个升序链表,两两合并。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nu原创 2021-11-04 20:36:27 · 172 阅读 · 0 评论 -
力扣17.电话号码的字母组合
题目: 传送门题意:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 “任意顺序” 返回。代码:#include<iostream>#include<string>#include<vector>#include<queue>using namespace std;string mp[10] = { "","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz原创 2021-10-27 20:54:17 · 113 阅读 · 0 评论 -
力扣16.最接近的三个数之和
题目: 传送门分析: 题意要求找到三个数的和和target最接近,力扣15是找到三个数使得他们的和是0,两个题非常相似,只是一个和是确定的,一个是未知的,但是解决思路一样,就是三个数先确定a,然后找b、c,找b和c可以通过移动双指针,如果数组是有序的,那么确定两个指针,分别放到数组两端,他们的和就有了规律,如果两个指针的和比想要的大,我们可以移动右指针,如果小,我们可以移动左指针,这样,我们就可以找到我们需要的结果。代码:#include<iostream>#include<原创 2021-10-22 20:19:44 · 156 阅读 · 0 评论 -
力扣15.三数之和
题目:传送门**题意:**给定一个数组,选出其中三个数,使其和为0.代码:#include<iostream>#include<vector>#include<algorithm>using namespace std;class Solution {public: vector<vector<int>> threeSum(vector<int>& nums);};vector<vector<原创 2021-10-13 20:00:47 · 71 阅读 · 0 评论 -
力扣14.最长公共前缀
题目: 传送门题意: 题目给出多个字符串,求出字符串的最长公共前缀,我们要知道字符前缀是什么,我们举个例子:字符串s:“abcdef” ,那么字符串的前缀有:[“a”,“ab”,“abc”,“abcd”,“abcde”,“abcdef”],字符串前缀的意思是从字符串的第一个开始,现在求这些字符串的最长公共前缀我们只需要将两个字符串的最长公共前缀保存成一个字符串,然后和其他字符串一次求最长公共前缀,如何求最长公共前缀呢?我只需要一个while循环就可以了:string Solution::longFi原创 2021-06-19 15:02:35 · 247 阅读 · 7 评论 -
力扣13.罗马数字转整数
题目: 传送门将罗马数字转化为整数,和力扣12是姐妹题,我们只要明白罗马数字和整数的转换原理,就像知道十进制和二进制转换原理一样,这是一个非常下饭的一个题,可以让人非常快乐和方式,就喜欢这样的题让我们上快乐代码:#include<iostream>#include<map>using namespace std;class Solution {public: int romanToInt(string s);};int Solution::romanToI原创 2021-06-18 20:19:16 · 71 阅读 · 2 评论 -
力扣12.整数转罗马数字
题目: 传送门题意: 将一个数字转换成罗马数字,数字的转换,神奇而又充满了趣味。首先:然后在让我们看一下罗马数字的规则:1、罗马数字的符号一共只有7个:I(代表1)、V(代表5)、X(代表10)、L(代表50)、C代表100)、D(代表500)、M(代表1,000)。这7个符号位置上不论怎样变化,它所代表的数字都是不变的。2、一个罗马数字符号重复几次,就表示这个数的几倍。如:"III"表示"3";"XXX"表示"30"。3、在罗马数字的上方加上一条横线或者加上下标的M,表示将这个数乘以原创 2021-06-17 17:25:49 · 292 阅读 · 0 评论 -
力扣11.盛最多水的容器
题目: 传送门题意: 大家都知道木桶的原理,木桶盛水在于它最短的那个木板,这个题是给你一系列木板,已经排好,现在问你,在两个木板之间倒水,选择哪两个木板可以使盛水最多,木板之间的距离已经确定。让我们先看一个样例:在最开始的时候我没有思路,之间想着暴力,但是这个数组的范围特别的大,如果暴力就需要两层循环,时间复杂度就不能够满足。我们知道如何判断这两个木板之间盛水最多,就是让两个木板之间的距离乘以两个木板中短的那一个,但是又不能遍历所有情况来判断,有没有什么思路可以使在判断下一种情况时能够找到最优情况,原创 2021-06-17 12:13:18 · 105 阅读 · 2 评论 -
力扣10.正则表达式匹配
题目:传送门**题意:**给你两个字符串s和p,p字符串中有’.‘和’‘这两种特殊字符,’.‘可以匹配任意字符,’‘代表它的前一个字符的个数,可以是0也可以是无数个,现在问s和p是否匹配,题意这点比较模糊,题目中说涵盖,涵盖我最开始的理解是包含,但是不是,题目的意思是通过对这两个特殊字符的转换使两个字符串相等。**思考:**我最开始的思路是使用函数递归,但是当时我理解的题意是包含,对于’‘这个情况不能很好的处理,然后我的方法是动态规划,开辟dp[x][y]这样一个二维数组,dp[x][y]代表的意思就是原创 2021-06-16 19:36:36 · 246 阅读 · 0 评论 -
力扣9.回文数
题目:传送门**题意:**判断一个数字是不是回文串,放松题,当你心情烦躁的时候不如来一波。代码:class Solution {public: bool isPalindrome(int x) { if(x<0) return false; int pos=0; int a[35]; while(x){ a[pos++]=x%10; x/=10;原创 2021-06-10 10:16:07 · 70 阅读 · 4 评论 -
力扣8.字符串转换整数
题目:传送门**题意:**这个题就是给你一个字符串,然后你提取出整数,这是题目的要求:我的思路就是直接暴力遍历一遍,找到符合条件的数字,暴力就很简单,但是这种问题必须要考虑全面,考虑出各种可能情况,因此写这种题必须要认真,如果不认真,你就可能这样:所以考虑问题必须要全面,根据题目要求想到要面临的各种情况,两个‘+’,如何判断这个数字是否超出int范围,何时应该截断…上代码:class Solution {public:///-2147483648 - 2147483647 int原创 2021-06-10 09:01:54 · 157 阅读 · 0 评论 -
力扣7.整数反转
题目:传送门**题意:**这个题很简单,就是给你一个整数然后你将整数反转,例如:1234,你要返回一个整数4321,并且题目要求不能超过int范围,int的范围是-2147483648 - 2147483647 ,在C++中你可以使用INT_MIN和INT_MAX代替,在不使用long long类型的情况下,我们该如何判断这个数是否超过int范围呢?上代码:class Solution {public: int reverse(int x) { int ans=0;原创 2021-06-09 16:18:01 · 94 阅读 · 0 评论 -
力扣6.Z字形变换
题目:传送门**题意:**这个是简单的规律题,我是找的字符下标的规律,规律说出来就没有意思了,大家可以根据自己的想法寻找规律。class Solution {public: string convert(string s, int numRows) { if(numRows<=1) return s; int x=numRows*2-2; int n=s.size(); string b;原创 2021-06-05 15:53:35 · 82 阅读 · 1 评论 -
力扣5.最长回文子串
题目:传送门**题意:**这个题给了一个字符串,然后在字符串中找到一个最长的回文子串并打印输出,首先我们要知道什么是回文串,回文串就是这个字符串的正序和逆序是相同的,例如"abba",这就是一个简单的回文串。我们可以观察这个回文串,就会发现回文串是一个对称的一个字符串,那么我们该如何在一个字符串中找到一个最长的回文串呢?我们就可以使用一种中心扩散的思想,遍历字符串,将遍历的当前位当做回文串的中心点,然后向左右两边开始扩散,我们就可以得到这个回文串,但是我也会想到,如果这个回文串是偶数呢,那么我们就要判断一原创 2021-06-05 14:21:18 · 172 阅读 · 3 评论 -
力扣4.寻找两个正序数组的中位数(不写你就损失了一个亿的题)
题目:传送门题意:这个题题意很好理解,就是给了两个正序数组 nums1 和 nums2 ,要求得出两个正序数组的中位数,最简单的思路就是把两个数组合并,然后就可以简单的求的中位数,但是这样就会浪费时间和空间,首先你要开一个大的数组用来存数据,然后你存数据的时候要遍历两个数组,这个时候的时间复杂度就是O(m+n)。那有没有其他办法呢?我的思路是定义两个指针,分别指向nums1 和nums2,因为两个数组给的是正序,那么我就只需要移动指针将前(m+n-1)/2个数据移出去,这个时候指针指向的数据就是我们需要的原创 2021-06-03 10:54:24 · 135 阅读 · 2 评论 -
力扣3.无重复字符的最长子串
题目:传送门题意:上代码:class Solution {public: int lengthOfLongestSubstring(string s) { int ans=0,f=0; map<char,int >p; for(int i=0;i<s.size();i++){ int x=p[s[i]],flag; if(x!=0) f=max(原创 2021-05-27 17:35:28 · 119 阅读 · 1 评论 -
力扣 2.两数相加
题目:传送门题意:这个题的题意很简单就是给两个链表,这两个链表存储的是两个数字的逆序,需要你求这两个数的和,并且存进链表中,并且是逆序存储,例如题目给的样例[2,4,3],[5,6,4],那这两个数就是342和465,他们的和就是807,输出[7,0,8],题意很简单,问题也不难,但是我这个小菜鸡错了很多遍。并且看这个题,这个题也给了我们一种大数求和的思路,可以将两个大数可以存储进单链表,然后分位求和。上代码:(后面会给上讲解,和我掉的坑,我是大菜鸡)/** * Definition for sin原创 2021-05-26 23:06:53 · 220 阅读 · 6 评论