LeetCode打卡
以后的leetcode打卡都会在Acwing里打卡,一天基本两道。
嘿,鱼骨头^O^
嘿!大家好,我是鱼骨头。我的Acwing用户名是 陈平安,欢迎大家关注我啊!
展开
-
LeetCode 64. 最小路径和
状态表示:f[i][j]状态表示:f[i][j]状态表示:f[i][j]从左上角走到(i,j)的集合从左上角走到(i, j)的集合从左上角走到(i,j)的集合属性:min属性:min属性:min状态计算:状态计算:状态计算:f[i][j]=min(f[i−1][j],f[i][j−1])+nums[i][j];f[i][j] = min(f[i-1][j], f[i][j-1]) + nums[i][j];f[i][j]=min(f[i−1][j],f[i][j−1])+nums[i][j];计.原创 2021-11-21 21:19:39 · 302 阅读 · 0 评论 -
LeetCode 413 . 等差数列划分
状态表示:f[i]状态表示:f[i]状态表示:f[i]属性:从前i个数中选,以第i个数结尾的等差数列的个数属性:从前i个数中选,以第i个数结尾的等差数列的个数属性:从前i个数中选,以第i个数结尾的等差数列的个数状态计算:状态计算:状态计算:因为题目要求是连续的,所以f[i]的数量只与f[i−1]有关因为题目要求是连续的,所以f[i]的数量只与f[i-1]有关因为题目要求是连续的,所以f[i]的数量只与f[i−1]有关当f[i]−f[i−1]==f[i−1]−f[i−2]时当f[i] - f[i-1.原创 2021-11-21 21:04:07 · 336 阅读 · 0 评论 -
LeetCode 198. 打家劫舍
状态表示:状态表示:状态表示:f[i][0/1]f[i][0/1]f[i][0/1]属性:属性:属性:f[i][0]表示从前i家偷,不偷第i家的最大价值f[i][0]表示从前i家偷,不偷第i家的最大价值f[i][0]表示从前i家偷,不偷第i家的最大价值f[i][1]表示从前i家偷,偷第i家的最大价值f[i][1]表示从前i家偷,偷第i家的最大价值f[i][1]表示从前i家偷,偷第i家的最大价值状态计算状态计算状态计算f[i][0]=max(f[i−1][0],f[i−1][1]);f[i][0.原创 2021-11-21 00:37:53 · 591 阅读 · 0 评论 -
LetCode 70.爬楼梯
DPDPDPclass Solution {public: int climbStairs(int n) { int p = 0, q = 1; int r; while(n--){ r = p + q; p = q; q = r; } return r; }};原创 2021-11-21 00:18:54 · 164 阅读 · 0 评论 -
LeetCode 47. 全排列 II
枚举这些位置能够放置哪些元素枚举这些位置能够放置哪些元素枚举这些位置能够放置哪些元素解法真是秒到绝巅,在每一层函数解法真是秒到绝巅,在每一层函数解法真是秒到绝巅,在每一层函数里面开一个局部哈希表记录一下里面开一个局部哈希表记录一下里面开一个局部哈希表记录一下每个元素是否出现并且不删去,只要每个元素是否出现并且不删去,只要每个元素是否出现并且不删去,只要遇到与这一层已经插入到哈希表的元素遇到与这一层已经插入到哈希表的元素遇到与这一层已经插入到哈希表的元素相同的数,就跳过并且不删去,只要遇到相同的数.原创 2021-11-20 08:06:34 · 222 阅读 · 0 评论 -
LeetCode 257.二叉树的所有路径
深搜,注意一些细节的处理深搜,注意一些细节的处理深搜,注意一些细节的处理/** * 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).原创 2021-11-19 11:58:06 · 299 阅读 · 0 评论 -
LeetCode 130. 被围绕的区域
逆向思维,从边缘的‘0′出发,做深搜,逆向思维,逆向思维,从边缘的‘0′出发,做深搜,逆向思维,逆向思维,从边缘的‘0′出发,做深搜,逆向思维,从边缘的‘0′出发,做深搜,把所有可以遍历到的‘0′从边缘的‘0′出发,做深搜,把所有可以遍历到的‘0′从边缘的‘0′出发,做深搜,把所有可以遍历到的‘0′标记为可达把所有可以遍历到的‘0′标记为可达标记为可达把所有可以遍历到的‘0′标记为可达标记为可达把所有可以遍历到的‘0′标记为可达之后遍历整个数组,把所有不可达的之后遍历整个数组,之后遍历整个数组,把所.原创 2021-11-19 11:56:33 · 147 阅读 · 0 评论 -
LeetCode 52. N皇后II
n皇后问题n皇后问题n皇后问题class Solution {public: int res; int N; vector<int>col; vector<int>dg; vector<int>udg; vector<string>g; void dfs(int u){ if(u == N){ res++; ret.原创 2021-11-18 09:13:55 · 69 阅读 · 0 评论 -
LeetCode 51. N皇后
经典n皇后问题经典n皇后问题经典n皇后问题class Solution {public: vector<vector<string>>res; int N; //表示行和列 vector<int>col; vector<int>dg; vector<int>udg; vector<string>g; void dfs(int u){ if.原创 2021-11-18 09:09:31 · 57 阅读 · 0 评论 -
LeetCode79. 单词搜索
深搜,记得回溯深搜,记得回溯深搜,记得回溯class Solution {public: int n, m; int dx[4] = {-1, 1, 0, 0}; int dy[4] = {0, 0, -1, 1}; bool dfs(vector<vector<char>>& board, int x, int y, int s, string& word){ board[x][y] = '#'; .原创 2021-11-18 08:48:16 · 45 阅读 · 0 评论 -
LeetCode 406. 根据身高建队列
算法:贪心+排序+二分+树状数组时间复杂度:O(nlognlogn)每次挑选当前还未确定位置的人中的最低身高的人,每次挑选当前还未确定位置的人中的最低身高的人,每次挑选当前还未确定位置的人中的最低身高的人,如果身高相同则挑选排在他前面的人数多的人,这样,如果身高相同则挑选排在他前面的人数多的人,这样,如果身高相同则挑选排在他前面的人数多的人,这样,在放置他的位置时,以前放置的人的位置不会对他当前放置的在放置他的位置时,以前放置的人的位置不会对他当前放置的在放置他的位置时,以前放置的人的位置不会对他.原创 2021-11-17 11:52:20 · 202 阅读 · 0 评论 -
LeetCode 122. 买卖股票的最 佳时机II
贪心:贪心:贪心:比较相邻两天股票的差值,如果前面那天股票比比较相邻两天股票的差值,如果前面那天股票比比较相邻两天股票的差值,如果前面那天股票比后面那天股票小,则可以完成一次交易后面那天股票小,则可以完成一次交易后面那天股票小,则可以完成一次交易class Solution {public: int maxProfit(vector<int>& prices) { int res = 0; for(int i = 1; i < pr.原创 2021-11-17 11:49:24 · 327 阅读 · 0 评论 -
LeetCode 121. 买卖股票的最 佳时机
从后往前扫一遍,求当前股票与最大股票差值的最大值,并决定是否更新最大股票的数值从后往前扫一遍,求当前股票与最大股票差值的最大值,并决定是否更新最大股票的数值从后往前扫一遍,求当前股票与最大股票差值的最大值,并决定是否更新最大股票的数值class Solution {public: int maxProfit(vector<int>& prices) { int res = 0; int n = prices.size(); i.原创 2021-11-17 11:45:21 · 47 阅读 · 0 评论 -
LeetCode 763.划分子母区间
记录一下字母最晚出现的位置,不断更新当前枚举区间的右端点,记录一下字母最晚出现的位置,不断更新当前枚举区间的右端点,记录一下字母最晚出现的位置,不断更新当前枚举区间的右端点,记录一下字母最晚出现的位置,不断更新当前枚举区间的右端点,记录一下字母最晚出现的位置,不断更新当前枚举区间的右端点,记录一下字母最晚出现的位置,不断更新当前枚举区间的右端点,直到当前位置和区间右端点相等,则将该区间长度置入vector中直到当前位置和区间右端点相等,则将该区间长度置入vector中直到当前位置和区间右端点相等,则将.原创 2021-11-17 11:02:02 · 53 阅读 · 0 评论 -
LeetCode 605.种花问题
贪心贪心贪心class Solution {public: bool canPlaceFlowers(vector<int>& flowerbed, int n) { for(int i = 0; i < flowerbed.size(); i++) { if(flowerbed[i] == 0) { if((i-1 < 0 || flowerbed[.原创 2021-11-17 10:59:41 · 167 阅读 · 0 评论 -
LeetCode 5. 最长回文子串
双指针+贪心双指针+贪心双指针+贪心class Solution {public: string longestPalindrome(string s) {string res; for(int i = 0; i < s.size(); i++) { //回文串是奇数 int l = i - 1, r = i + 1; while(l >= 0 && r <.原创 2021-11-17 10:58:05 · 47 阅读 · 0 评论 -
LeetCode 77. 组合
设置一下枚举的起始值,深搜设置一下枚举的起始值,深搜设置一下枚举的起始值,深搜class Solution {public: vector<vector<int>>res; vector<int>st; vector<int>path; void dfs(int n, int k, int u, int start){ if(u == k){ res.push_back(path);.原创 2021-11-17 07:34:31 · 43 阅读 · 0 评论 -
LeetCode 46.全排列
全排列全排列全排列class Solution {public: vector<vector<int>>res; int n; vector<int>st; vector<int>path; void dfs(vector<int>&nums, int u){ if(u == n){ res.push_back(path); ret.原创 2021-11-17 07:14:48 · 266 阅读 · 0 评论 -
LeetCode 417 太平洋大西洋水流问题
深搜深搜深搜class Solution {public: int n, m; vector<vector<int>>st1; vector<vector<int>>st2; int dx[4] = {-1, 1, 0, 0}; int dy[4] = {0, 0, -1, 1}; void dfs(vector<vector<int>>& heights, int x, i.原创 2021-11-16 15:58:14 · 218 阅读 · 0 评论 -
LeetCode 695 岛屿的最大面积
经典floodfill算法,返回最大岛屿的面积经典floodfill算法,返回最大岛屿的面积经典floodfill算法,返回最大岛屿的面积class Solution {public: int dx[4] = {-1, 1, 0, 0}; int dy[4] = {0, 0, -1, 1}; int n, m; int dfs(vector<vector<int>>& grid, int x, int y){ grid[x.原创 2021-11-15 14:36:59 · 54 阅读 · 0 评论 -
LeetCode 75 颜色分类
计数排序思想计数排序思想计数排序思想用一个数组记录一下每个数出现了多少次,用一个数组记录一下每个数出现了多少次,用一个数组记录一下每个数出现了多少次,之后按顺序从小到大输出,每个数出现了之后按顺序从小到大输出,每个数出现了之后按顺序从小到大输出,每个数出现了多少次就输出出少次多少次就输出出少次多少次就输出出少次class Solution {public: void sortColors(vector<int>& nums) { int cnt[3] .原创 2021-11-15 14:10:17 · 104 阅读 · 0 评论 -
LeetCode 3 无重复字符的最长子串
双指针模板题双指针模板题双指针模板题class Solution {public: int lengthOfLongestSubstring(string s) { unordered_map<char, int>d; if(s.empty()) return 0; int n = s.size(); int res = 0; for(int i = 0, j = 0; i < n; i++).原创 2021-11-15 07:33:05 · 665 阅读 · 0 评论 -
LeetCode 2 两数相加
模拟加法模拟加法模拟加法/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(.原创 2021-11-15 07:30:48 · 213 阅读 · 0 评论 -
LeetCode 1 两数之和
使用哈希表可以做到O(n)的时间复杂度使用哈希表可以做到O(n)的时间复杂度使用哈希表可以做到O(n)的时间复杂度class Solution {public: unordered_map<int,int>d; vector<int> twoSum(vector<int>& nums, int target) { int n = nums.size(); vector<int>res; .原创 2021-11-15 07:27:34 · 197 阅读 · 0 评论 -
LeetCode 435 无重叠区间
按照右端点排序,每次看当前区间的左端点与上一个区间的右端点是否有交集,按照右端点排序,每次看当前区间的左端点与上一个区间的右端点是否有交集,按照右端点排序,每次看当前区间的左端点与上一个区间的右端点是否有交集,无交集则最大不相交区间数量加一,更新右端点无交集则最大不相交区间数量加一,更新右端点无交集则最大不相交区间数量加一,更新右端点class Solution {public: static bool cmp(vector<int> &a, vector<int&.原创 2021-11-14 23:53:20 · 214 阅读 · 0 评论 -
LeetCode 135分发糖果
状态表示:f[i]表示第i个小朋友分到的糖果状态表示:f[i]表示第i个小朋友分到的糖果状态表示:f[i]表示第i个小朋友分到的糖果属性:min属性:min属性:min状态计算:状态计算:状态计算:当a[i]>a[i−1]当a[i] > a[i-1]当a[i]>a[i−1]f[i]=max(f[i],f[i−1]+1);f[i] = max(f[i],f[i-1]+1);f[i]=max(f[i],f[i−1]+1);当a[i]>a[i+1]当a[i] > a[i+.原创 2021-11-14 23:49:28 · 258 阅读 · 0 评论 -
LeetCode 455 分发饼干
贪心思想,将孩子的胃口和饼干的尺寸分别从贪心思想,将孩子的胃口和饼干的尺寸分别从贪心思想,将孩子的胃口和饼干的尺寸分别从小到大排序,从小到大匹配,直到不能匹配为止小到大排序,从小到大匹配,直到不能匹配为止小到大排序,从小到大匹配,直到不能匹配为止class Solution {public: int findContentChildren(vector<int>& g, vector<int>& s) { int res = 0; .原创 2021-11-14 23:45:52 · 85 阅读 · 0 评论