![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
lardoris928
这个作者很懒,什么都没留下…
展开
-
leetcode 3/剑指 48 最长不含重复字符的子字符串 哈希set的函数(count,insert)
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/wu-zhong-fu-zi-fu-de-zui-chang-zi-chuan-by-leetc-2/class Solution {public: int lengthOfLongestSubstring(string s) { // 哈希集合,记录每个字符是否出现过 uno...原创 2021-09-12 15:40:08 · 188 阅读 · 0 评论 -
链表专题(2/21/61)
文章目录2. 两数相加(中等)直观笨办法(稍微还有点问题)2. 两数相加(中等)直观笨办法(稍微还有点问题)/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode*原创 2021-09-11 16:04:06 · 141 阅读 · 0 评论 -
leetcode 322. 零钱兑换 背包问题
(本来想的是dfs不加一的那种 其实是背包问题 看来有些生疏了 一会去看一下dfs)https://leetcode-cn.com/problems/coin-change/solution/dai-ma-sui-xiang-lu-dai-ni-xue-tou-wan-q-80r7/这个递推公式的意思就是 如果取coins[i],那么硬币数量就是dp[j - coins[i]] + 1,其中dp数组是存储当前容量的,凑足总额为j 的最少个数为dp[j]递推公式:dp[j] = min(dp[..原创 2021-09-09 17:30:55 · 130 阅读 · 0 评论 -
leetcode 73. 矩阵置零 趋势科技手撕 将额外空间压缩到O(1)
文章目录方法一:标记数组方法二:使用两个标记变量方法三:使用一个标记变量方法一:标记数组class Solution {public: void setZeroes(vector<vector<int>>& matrix) { int m = matrix.size(); int n = matrix[0].size(); vector<int> row(m), col(n); fo原创 2021-08-29 17:53:25 · 61 阅读 · 0 评论 -
leetcode 40. 组合总和 II used数组有点点抽象
题解:https://leetcode-cn.com/problems/combination-sum-ii/solution/dai-ma-sui-xiang-lu-dai-ni-xue-tou-hui-s-ig29/回溯三部曲分析完了,整体C++代码如下:class Solution {private: vector<vector<int>> result; vector<int> path; void backtra...原创 2021-08-25 16:03:47 · 88 阅读 · 0 评论 -
leetcode 39. 组合总和
class Solution {private: vector<vector<int>> res; vector<int> path; //int sum=0;public: void dfs(vector<int>& candidates,int n,int target,int sum){ if (sum > target) { return;//这里第一次忽视了 ..原创 2021-08-25 15:43:38 · 69 阅读 · 0 评论 -
leetcode 155. 最小栈
我写的class MinStack {private: stack<int> minStack; vector<int> all;//之后找最小元素的public: /** initialize your data structure here. */ MinStack() { } void push(int val) { minStack.push(val); all.push..原创 2021-08-25 10:34:46 · 61 阅读 · 0 评论 -
leetcode 242. 有效的字母异位词
想到的第一个方法是排序后比较class Solution {public: bool isAnagram(string s, string t) { //排序 if(s.size()!=t.size()) return false; if(s.size()==0&&t.size()==0) return true; sort(s.begin(),s.end()); sort(t.begin(),.原创 2021-08-25 10:07:50 · 49 阅读 · 0 评论 -
leetcode 198. 打家劫舍 经典dp 注意dp数组的范围
dp数组的大小应该为(n+1),其中n为nums的长度,因为第0位要存放n=0的时候的值 最后结果返回的是dp[n] 因为dp数组的最后一位的下标是nint rob(vector<int>& nums) { if (nums.size() == 0) { return 0; } // 子问题: // f(k) = 偷 [0..k) 房间中的最大金额 // f(0) = 0 // f(1) = nums[0]...原创 2021-08-24 18:46:51 · 104 阅读 · 0 评论 -
leetcode 283. 移动零 方法二很好
空间换时间(但是不符合题意 题意不能有辅助数组)//自己写的class Solution {public: void moveZeroes(vector<int>& nums) { if(nums.size()==0||nums.size()==1) return; vector<int> res(nums.size(),0); for(int i=0,j=0;i<nums.size();){ .原创 2021-08-24 11:24:42 · 60 阅读 · 0 评论 -
leetcode 787. K 站中转内最便宜的航班 bellford 不会
class Solution {private: static constexpr int INF = 10000 * 101 + 1;public: int findCheapestPrice(int n, vector<vector<int>>& flights, int src, int dst, int k) { vector<vector<int>> f(k + 2, vector<int...原创 2021-08-24 10:00:44 · 110 阅读 · 0 评论 -
leetcode 189. 旋转数组 整体旋转后再分块旋转
k %= nums.size();这句好妙 就是说你移动的距离k有可能大于数组的长度class Solution {public: void reverse(vector<int>& nums, int start, int end) { while (start < end) { swap(nums[start], nums[end]); start += 1; end原创 2021-08-24 09:33:25 · 186 阅读 · 0 评论 -
leetcode 70. 爬楼梯 经典dp
方法一:class Solution {public: int climbStairs(int n) { if (n == 1) return 1; if (n == 2) return 2; vector<int> res(n + 1); res[0]=0; res[1]=1; res[2]=2; for (int i = 3; i <= n; i++){ res[i] = res[i - 1] + res[i - 2]; } retur.原创 2021-08-23 21:24:02 · 51 阅读 · 0 评论 -
989. 数组形式的整数加法 多做这个和笔记里上一个提
class Solution {public: vector<int> addToArrayForm(vector<int>& num, int k) { vector<int> res; int n = num.size(); for (int i = n - 1; i >= 0; --i) { int sum = num[i] + k % 10; ..原创 2021-08-17 17:04:31 · 68 阅读 · 0 评论 -
1446. 连续字符 双指针 滑动窗
class Solution {public: int maxPower(string s) { //子字符串必须连续 int maxnum=1; int curr=1; for(int i=0,j=1;i<s.size(),j<s.size();){ while(s[i]==s[j]){ curr++; j++; .原创 2021-08-17 09:54:09 · 44 阅读 · 0 评论 -
leetcode 141. 环形链表 (判断链表是否有环)
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: bool hasCycle(ListNode *head) { if(head==nullptr) return fal原创 2021-08-15 16:58:21 · 56 阅读 · 0 评论 -
leetcode 8. 字符串转换整数 (atoi)
class Solution {public: int myAtoi(string s) { int i=0; while(s[i]==' '){ i++; } if(s.size() == i || (('0'>s[i] || s[i] > '9' )&& s[i] != '+' && s[i] != '-')) return 0; int ...原创 2021-08-15 16:47:14 · 199 阅读 · 0 评论 -
leetcode 7. 整数反转 int越界处理
这个题最开始的想法是存在字符串里 不过太麻烦了 就看答案了class Solution {public: int reverse(int x) { int rev = 0; while (x != 0) { if (rev < INT_MIN / 10 || rev > INT_MAX / 10) { return 0; } int digit..原创 2021-08-15 12:36:36 · 89 阅读 · 0 评论 -
leetcode 6. Z 字形变换 flag数组
这个flag反向也太强了 这个没做过根本是想不到class Solution {public: string convert(string s, int numRows) { if(numRows==1){ return s;} vector<string> store(numRows);//直接往进存string 几行最后就是几个string int j=0; int flag=1;...原创 2021-08-15 12:12:14 · 72 阅读 · 0 评论 -
leetcode 3. 无重复字符的最长子串 哈希map和哈希set的使用
文章目录unordered_set常用函数两者的公共接口map的返回值map中find函数的使用把题理解错了 最长无重复字符的子串 要用滑动窗口滑动窗口这个右指针的分析好棒啊!class Solution {public: int lengthOfLongestSubstring(string s) { // 哈希集合,记录每个字符是否出现过 unordered_set<char> occ; int n = s.size()原创 2021-08-14 18:37:31 · 82 阅读 · 0 评论 -
leetcode 62. 不同路径 动态规划经典题 二维数组的初始化
也就是说把第一行和第一列放在动态规划方程中时的值是1 但如果他们是终点的话就不是1了 这和剪绳子那个题是一样的class Solution {public: int uniquePaths(int m, int n) { vector<vector<int>> f(m, vector<int>(n)); for (int i = 0; i < m; ++i) { f[i][0] = 1; ...原创 2021-08-14 14:46:56 · 72 阅读 · 0 评论 -
leetcode 11. 盛最多水的容器 移动短板
若向内 移动短板 ,水槽的短板 min(h[i], h[j]) 可能变大,因此下个水槽的面积 可能增大 。若向内 移动长板 ,水槽的短板 min(h[i], h[j]) 不变或变小,因此下个水槽的面积 一定变小 。class Solution {public: int maxArea(vector<int>& height) { int i = 0, j = height.size() - 1, res = 0; wh..原创 2021-08-13 22:06:16 · 80 阅读 · 0 评论 -
leetcode 45. 跳跃游戏 II 贪心 有点燃
方法二:正向查找可到达的最大位置//每次在上次能跳到的范围(end)内选择一个能跳到的最远位置(max_far)作为新的范围(end)class Solution {public: int jump(vector<int>& nums) { int max_far = 0;// 目前能跳到的最远位置 int step = 0; // 跳跃次数 int end = 0; // 上次跳跃可达范围右边界..原创 2021-08-13 20:57:14 · 65 阅读 · 0 评论 -
leetcode 55. 跳跃游戏 实时更新数组
数组中的元素是能跳的最大长度 也就是说你也可以不跳这么多class Solution {public: bool canJump(vector<int>& nums) { int n = nums.size(); int rightmost = 0; for (int i = 0; i < n; ++i) {//这个地方用auto会计算错误 因为后面再用下标计算 //而auto直接读的是当前的值 .原创 2021-08-13 17:19:46 · 54 阅读 · 0 评论 -
leetcode 22. 括号生成 暴力/递归回溯 忘写return居然速度提高?
文章目录自己写的暴力法回溯法(有条件递归)记着要返回上一级递归 不然会内存泄露#include<iostream>#include<string>#include<algorithm>#include<vector>using namespace std;class Solution { bool valid(const string& str) { int balance = 0; for (char c : str) {原创 2021-08-13 16:27:06 · 542 阅读 · 0 评论 -
leetcode 5. 最长回文子串 中心扩展法 while判断语句的顺序
class Solution {public: string longestPalindrome(string s) { int size=s.size(); int length=0; string ans; for(int i=0;i<size;i++){ int l1=i-1; int r1=i+1;//奇数中心 while(l1>=0&am..原创 2021-08-13 14:20:21 · 60 阅读 · 0 评论 -
leetcode 88. 合并两个有序数组
暴力sort的解法就不说了class Solution {public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { int p1 = m - 1, p2 = n - 1; int tail = m + n - 1; int cur; while (p1 >= 0 || p2 >= 0) .原创 2021-08-12 15:14:24 · 150 阅读 · 0 评论 -
leetcode 417. 太平洋大西洋水流问题 dfs
class Solution {public: vector<vector<int>> P, A, ans; int n, m; vector<vector<int>> pacificAtlantic(vector<vector<int>>& M) { n = M.size(), m = M[0].size(); P = A = vector<vector...原创 2021-08-09 23:01:16 · 69 阅读 · 0 评论 -
leetcode 130. 被围绕的区域 dfs bfs
dfsclass Solution {public: int n, m; void dfs(vector<vector<char>>& board, int x, int y) { if (x < 0 || x >= n || y < 0 || y >= m || board[x][y] != 'O') { return; } board[x][y] = ..原创 2021-08-09 00:15:52 · 63 阅读 · 0 评论 -
leetcode 200. 岛屿数量 -走地图问题 bfs+dfs
DFSclass Solution {public: void dfs(vector<vector<char>>& grid, int i, int j) { if(i < 0 || i >= grid.size() || j < 0 || j >= grid[0].size() || grid[i][j] == '0')return; grid[i][j] = '0'; // miss d.原创 2021-08-08 23:16:14 · 74 阅读 · 0 评论 -
leetcode 15. 三数之和 (多益网络笔试) (二维矩阵行数列数)
#include <iostream>#include <algorithm>#include <string>#include <vector>#include <unordered_map>using namespace std;class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { ...原创 2021-07-26 23:15:59 · 125 阅读 · 0 评论 -
leetcode 5824. 子字符串突变后可能得到的最大整数
注意一些细节替换的是子字符串 ,必须是连续的。比如示例一,如果替换的字符串长一点,整体数值就会小了#include <iostream>#include <algorithm>#include <string>#include <vector>#include <unordered_map>using namespace std;//这是我刚开始写的 题都没读懂//class Solution {//public://..原创 2021-07-25 22:32:59 · 64 阅读 · 0 评论 -
哈希表相关题
文章目录5804. 检查是否所有字符出现次数相同5804. 检查是否所有字符出现次数相同class Solution {public: bool areOccurrencesEqual(string s) { unordered_map<char,int> temp; for(char i:s){//这里如果用auto 则轮询的是{char,int}这个组合 temp[i]++; } int原创 2021-07-25 10:25:37 · 54 阅读 · 0 评论 -
leetcode 557. 反转字符串中的单词 III (诺瓦星云) 这个题很不错
char空格是用单引号的答案:class Solution {public: string reverseWords(string s) { int length = s.length(); int i = 0; while (i < length) { int start = i; while (i < length && s[i] != ' ') {//这里在找空.原创 2021-07-21 11:00:46 · 109 阅读 · 0 评论 -
leetcode 541. 反转字符串 II
很直接的解法,就是按照2*k的递增来遍历,然后把前面k个翻转即可,这里需要注意一下边缘情况即可class Solution {public: string reverseStr(string s, int k) { int n = s.size(); for (int i = 0; i < n; i += (k<<1)) { // 双指针去翻转即可 int l = i; .原创 2021-07-20 10:43:50 · 49 阅读 · 0 评论 -
leetcode 344. 反转字符串
class Solution {public: void reverseString(vector<char>& s) { int size=s.size(); int i=0; int j=size-1; for(;i<=j;i++,j--){ char temp; temp=s[i]; s[i]=s[j]; .原创 2021-07-20 09:13:25 · 57 阅读 · 0 评论 -
leetcode 78. 子集(无重复元素)+leetcode 90. 子集 II(有重复元素)
文章目录78.子集方法一:位运算方法二:回溯78.子集方法一:位运算集合子集中的元素与子集下标中二进制位的“1”相对应,因此求子集中元素的运算可以转化为寻找子集下标二进制位中“1”所在位置的运算。此运算可以利用移位操作来实现。例如.求101所对应的子集,我们可以通过3次移位,每次先将当前的数值与数值1相与,如果结果等于1,则本次第0位上的值为1,否则为0.由移位的次数可以知道当前第0位的1在原数据中的位置.从而找到对应的实际元素。运算如下:#include <iostream>#i原创 2021-07-13 08:42:01 · 214 阅读 · 0 评论 -
剑指 Offer 45. 把数组排成最小的数(快排)(lambda表达式)
class Solution {public: string minNumber(vector<int>& nums) { vector<string> strs; for(int i = 0; i < nums.size(); i++) strs.push_back(to_string(nums[i])); quickSort(strs, 0, strs.size() - 1);...原创 2021-06-30 10:32:38 · 94 阅读 · 0 评论 -
剑指offer44. 数字序列中某一位的数字(找规律题)
class Solution {public: int findNthDigit(int n) {//数位n long long start = 1;//每个digit起始的数字 int digit = 1;//位数 long long count = 9;//数位数量 while (n>count){ n -= count; start *= 10; digit++; count = start* digit * 9; }//这里做完定位到...原创 2021-06-29 20:58:47 · 59 阅读 · 0 评论 -
剑指 Offer 43. 1~n 整数中 1 出现的次数 leetcode233. 数字 1 的个数(没做)
原创 2021-06-29 20:16:44 · 64 阅读 · 0 评论