![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
力扣刷题
隳天
这个作者很懒,什么都没留下…
展开
-
LeetCode :141. 环形链表
141. 环形链表思路:思维别僵化嘛,给你们看看那些脑路清奇的写法。1.测试处来最长的数据长度,然后就直接来减超过就是循环。class Solution {public: bool hasCycle(ListNode *head) { int cout=8029; while(head!=NULL && cout>0){ head=head->next; cout--; }原创 2021-01-30 15:15:48 · 84 阅读 · 0 评论 -
LeetCode:136. 只出现一次的数字
136. 只出现一次的数字思路:异或处理如果两个一样的异或完为其本身,若不相同则为其本身。技巧:accumulate(nums.begin(),nums.end(),0,bit_xor());里面accumulate为累加函数,bit_xor()为异或操作。class Solution {public: int singleNumber(vector<int>& nums) { return accumulate(nums.begin(),nums.end(原创 2021-01-30 13:03:10 · 93 阅读 · 0 评论 -
LeetCode :94. 二叉树的中序遍历
94. 二叉树的中序遍历思路:二叉树中序排序,递归写法。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(n原创 2021-01-28 12:48:06 · 51 阅读 · 0 评论 -
LeetCode: 78. 子集
78. 子集思路:[1,2,3]->[]->[],[1]->[],[1],[2],[1,2]->[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3],看出来了吗,每次都把原来的拉出来加上原数组的一个值,就完成了。class Solution {public: vector<vector<int>> subsets(vector<int>& nums) { vector<vector&l原创 2021-01-26 20:28:23 · 46 阅读 · 0 评论 -
LeetCode: 75. 颜色分类
75. 颜色分类思路:真的没看懂这题的要求有啥用,sort不是能完全解决吗???class Solution {public: void sortColors(vector<int>& nums) { sort(nums.begin(),nums.end()); }};原创 2021-01-26 18:25:10 · 72 阅读 · 0 评论 -
LeetCode:56. 合并区间
56. 合并区间思路:我感觉我好像在哪里写过这道题和dp的导弹射程问题好相似~…事实证明不是dp,用双指针来写还是比较简洁的,class Solution {public: vector<vector<int>> merge(vector<vector<int>>& intervals) { int n=intervals.size(); vector<vector<int>> ans;原创 2021-01-26 18:17:56 · 46 阅读 · 0 评论 -
LeetCode 62. 不同路径
62. 不同路径思路:dp基础问题,只有两种走法,向下走和向右走,就可以推得一个思路,a[i][j] 的走法就是从a[i-1][j] ,a[i][j-1]两个方向走过来的,哎这就开始套娃了就要不断向上求解,还有个问题就是行矩阵和列矩阵的的走法是唯一的。class Solution {public: int uniquePaths(int m, int n) { int dp[n][m]; for(int i=0;i<n;++i){ for(int j原创 2021-01-26 14:07:26 · 47 阅读 · 0 评论 -
LeetCode:64. 最小路径和
64. 最小路径和思路:acm入门的dp系列题型思路,要求每一步最小达到整体最小的思路,dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grit[i][j]class Solution {public: int minPathSum(vector<vector<int>>& grid) { int row=grid.size(); int col=grid[0].size(); vector<vector&l原创 2021-01-26 13:14:41 · 68 阅读 · 1 评论 -
LeetCode: 70. 爬楼梯
70. 爬楼梯思路:这样想哈,首先一层1,二层2,三层3,这个三的得到方法就是上一层的方法然后多上两层,加上,上二层的方法在多上一层,哎然后有意思的来了这是一个数列啥名字我给忘了但是记得有这个数列,a[i]=a[i-1]+a[i-2]。。。。。这就可以直接强算了。。class Solution {public: int climbStairs(int n) { vector<int> dp; dp.push_back(1); dp.push原创 2021-01-25 22:29:34 · 67 阅读 · 0 评论 -
LeetCode: 55. 跳跃游戏
55. 跳跃游戏思路:很正宗的一道动态规划,但是我一下没思路,我觉的递归应该能过,先提交了,有问题的话我一会儿回来改递归:class Solution { bool emm(vector<int>& nums,int i){ if(nums[i]+i >= (nums.size()-1)) return true; for(int j=nums[i];j>0;j--){ if(emm(nums,j+i))原创 2021-01-25 16:24:57 · 83 阅读 · 0 评论 -
LeetCode: 49. 字母异位词分组
49. 字母异位词分组思路:题目要将相同字母的字符串分成一个类,现在问题是如何判断他是相同字母,然后就想到了一个很有意思的STL—map<a,b>,中间把字符排序尽可能保证其是同一个标准。后面在将map转vector。下面是map遍历的方法。。。https://blog.csdn.net/u010429424/article/details/75332700class Solution {public: vector<vector<string>> g原创 2021-01-25 15:44:36 · 90 阅读 · 0 评论 -
LeetCode: 53. 最大子序和
53. 最大子序和思路:这道题在我看来就是贪心,,然后就想着用递归写一下,然后就代码越写越多,越写越不对劲,,最后看了一下别人写的解题方法,,感觉自己想麻烦了。。。class Solution {public: int maxSubArray(vector<int>& nums) { int max=nums[0]; int sum=nums[0]; for(int i=1;i<nums.size();i++){ if(sum>原创 2021-01-24 20:20:26 · 48 阅读 · 0 评论 -
LeetCode: 48. 旋转图像
48. 旋转图像思路·:模拟数组的旋转。先转置在旋转比较简单。class Solution {public: void rotate(vector<vector<int>>& matrix) { int temp; int n =matrix.size(); for(int i=0;i<n;++i){ for(int j=i;j<n;++j){原创 2021-01-23 20:37:22 · 67 阅读 · 0 评论 -
LeetCode: 46. 全排列
46. 全排列思路:递归永远的神!!!!class Solution {public: void emm(vector<int>& nums,vector<vector<int>>& ans,vector<int> &tem,vector<int>& isIn,int len){ if(len==nums.size()) ans.push_back(tem); else{原创 2021-01-23 15:26:25 · 63 阅读 · 0 评论 -
LeetCode: 39. 组合总和
39. 组合总和思路:1.多个循环找出值相等的组合,我猜要超时。2.递归找出值相符合的组合,在vector<vector>里进行保存。中间的判断可以自由选择,选择加判断也可以选择减判断,这选择的是减判断。class Solution {public: void emm(vector<int> &candidates,vector<vector<int>> &ans,vector<int> &tem,int ta原创 2021-01-23 14:08:26 · 87 阅读 · 1 评论 -
LeetCode: 34. 在排序数组中查找元素的第一个和最后一个位置
34. 在排序数组中查找元素的第一个和最后一个位置思路:题目要求了log级别的时间复杂度,,,思路1,两个指针走两头这个直接无了,时间复杂度是n,思路2,二分查找在时间复杂度上是log,二分有两种写法,第一种是循环写,第二种是递归写,这里选择的是递归写。class Solution {public: void emm(vector<int> &nums,int left,int right,int target,int &a,int &b){ i原创 2021-01-22 20:46:07 · 65 阅读 · 1 评论 -
LeetCode:33. 搜索旋转排序数组
33. 搜索旋转排序数组思路:第一个想法是直接sort一下然后在二分查找,开始写的时候才发现这样写不对。第二个想法就是找到那个变化的位置,进行两个二分查找,直到找到那个值。嗯第二个方法超时了,,,第三个思路是第二个思路的改进版,可以把整个看为递增的模式,其实是由两端有序的数组组合在一起的,而且前面的大·,后面的小可以用二分法直接控制寻找。class Solution {public: int search(vector<int>& nums, int target) {原创 2021-01-22 15:33:58 · 40 阅读 · 0 评论 -
LeetCode: 31. 下一个排列
31. 下一个排列思路:下一个排序,就是要进行比较,从后向前找,找出第一个nums[i+1]>nums[i]中i的位置,若没找到就表明该nums是一个从大到小的排列,就可以进行对调,变成从小到大排。ex:5 4 3 2 1 -----> 1 2 3 4 5 以三为中心进行对调。class Solution {public: void nextPermutation(vector<int>& nums) { if(nums.size()&原创 2021-01-22 13:34:42 · 49 阅读 · 0 评论 -
LeetCode: 22. 括号生成
22. 括号生成思路:递归,先生成左端的括号,之后在生成右段的括号,合成一个完整的括号并加入数组中。class Solution {public: void backtrack(vector<string> &ans,string cur,int open,int close,int max) { if(cur.length() == max*2){ ans.push_back(cur); return;原创 2021-01-21 13:48:07 · 67 阅读 · 0 评论 -
LeetCode: 19. 删除链表的倒数第 N 个结点
19. 删除链表的倒数第 N 个结点思路:刚开始还想着用a.size()来获取链表长度,后面反应过来这不是数组,然后有来了一个大循环获得链表长度,然后减去尾部长度在循环一次,,,,,这是一个比较蠢的方法,,,哎就有了另一个方法,双指针来玩,A,B指针,A比B快n个距离,当A为空时,就可以用B确定了。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; *原创 2021-01-21 12:46:28 · 100 阅读 · 0 评论 -
LeetCode:21. 合并两个有序链表
21. 合并两个有序链表两个链表进行合并需要一个新的端点进行合并,逻辑简单,清晰。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(原创 2021-01-21 11:56:34 · 61 阅读 · 0 评论 -
LeetCode: 20. 有效的括号
20. 有效的括号数据结构的题,没啥新奇的想法,就是栈的运用:class Solution {public: bool isValid(string s) { stack<char> m_stack; for(char &c:s){ switch(c){ case'(':m_stack.push(c);break; case'[':m_stack.push(c);break;原创 2021-01-21 11:44:24 · 38 阅读 · 0 评论 -
LeetCode 14. 最长公共前缀
14. 最长公共前缀小记:strs[i].find(s)在里面找是否有相同的地方,substr切割函数。这是看的大佬的写法。。nb~class Solution {public: string longestCommonPrefix(vector<string>& strs) { if(strs.size()==0) return ""; string s=strs[0]; for(int i=0;i原创 2021-01-14 19:45:36 · 42 阅读 · 0 评论 -
LeetCode 13. 罗马数字转整数
13. 罗马数字转整数思路:暴力解决,里面有些规律在里面,比如当d[i]<d[i+1]这表明两个是叠加产生的,应该减去。class Solution {public: int romanToInt(string s) { vector<int>num(s.size()); //获取长度 for(int i=0;i<s.size();i++){ if (s[i] == 'I') num.push_bac原创 2021-01-14 19:00:21 · 46 阅读 · 0 评论 -
LeetCode 12. 整数转罗马数字
12. 整数转罗马数字思路:一一对应,建立数组就行。class Solution {public: string intToRoman(int num) { string str=""; int num1[13]={1,4,5,9,10,40,50,90,100,400,500,900,1000}; string str1[13]={"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"};原创 2021-01-14 18:41:39 · 56 阅读 · 0 评论 -
LeetCode 11. 盛最多水的容器
11. 盛最多水的容器思路:先别想这用排序,那样子得自己建立数据结构,暴力或者夹边。暴力必炸时间,建议夹边。class Solution {public: int maxArea(vector<int>& height) { if(height.size()<2) return 0; int maxarea=0; int left=0; int right=height.size()-1;原创 2021-01-14 18:08:15 · 49 阅读 · 0 评论 -
LeetCode -9 回文数
LeetCode -9 回文数小记:stringstream 为int转string的一个类型,推荐使用。reverse为字符串颠倒函数推荐使用。 bool isPalindrome(int x) { if(x<0) return false; else{ string res; stringstream ss; ss << x; ss >> res;原创 2021-01-13 17:14:51 · 63 阅读 · 0 评论 -
力扣-1
第一种方法暴力两次循环,判断是否相等如果相等则就返回,如果不相等就继续,但是重要的来了,他会超时。。。第二种方法map方法,一个map有两个数据域一个索引一个值域,用空间换时间。简单来说就是做减法,class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> m; vector原创 2020-11-09 23:22:10 · 78 阅读 · 0 评论