Leetcode
文章平均质量分 94
一粒大榴莲
这个作者很懒,什么都没留下…
展开
-
力扣 464. 我能赢吗(c++ bitset记忆化搜索)
class Solution {public: int a,b; unordered_map<unsigned long long,bool> mp; bool dfs(int sum,bitset<25> bs){ if(sum >= b) return true; if(mp.find(bs.to_ullong()) != mp.end()) return mp[bs.to_ullong()]; ..原创 2020-07-17 21:35:40 · 237 阅读 · 0 评论 -
力扣 统计全 1 子矩形(前缀和+动态规划)
给你一个只包含 0 和 1 的 rows * columns 矩阵 mat ,请你返回有多少个 子矩形 的元素全部都是 1 。示例 1:输入:mat =[[1,0,1],[1,1,0],[1,1,0]]输出:13解释:有 6 个 1x1 的矩形。有 2 个 1x2 的矩形。有 3 个 2x1 的矩形。有 1 个 2x2 的矩形。有 1 个 3x1 的矩形。矩形数目总共 = 6 + 2 + 3 + 1 + 1 = 13 。示例 2:输入:mat =[[0,1,1,0],[0,转载 2020-07-05 17:59:06 · 233 阅读 · 0 评论 -
力扣 最长有效括号(三种解法)(动态规划+栈)
动态规划:class Solution {public: int longestValidParentheses(string s) { int maxans = 0, n = s.length(); vector<int> dp(n, 0); for (int i = 1; i < n; i++) { if (s[i] == ')') { if (s[i - 1] == .原创 2020-07-04 10:37:59 · 309 阅读 · 0 评论 -
力扣 最长重复子数组和最长公共子序列(动态规划)
给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例 1:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出: 3解释:长度最长的公共子数组是 [3, 2, 1]。最长重复子数组是需要连续的,递推公式为dp[i][j] = dp[i-1][j-1] + 1;最长公共子序列是不需要连续的,递推公式为 dp[i][j] = max(dp[i-1][j-1]+(text2[i - 1] == text1[j - 1]?1:0),dp[i-1][j],d原创 2020-07-01 10:06:58 · 597 阅读 · 0 评论 -
力扣 满足条件的子序列数目(排序+二分查找+快速幂)
给你一个整数数组 nums 和一个整数 target 。请你统计并返回 nums 中能满足其最小元素与最大元素的 和 小于或等于 target 的 非空 子序列的数目。由于答案可能很大,请将结果对 10^9 + 7 取余后返回。示例 1:输入:nums = [3,5,6,7], target = 9输出:4解释:有 4 个子序列满足该条件。[3] -> 最小元素 + 最大元素 <= target (3 + 3 <= 9)[3,5] -> (3 + 5 <= 9)转载 2020-06-29 00:12:06 · 503 阅读 · 0 评论 -
力扣 第29场双周赛 删掉一个元素以后全为 1 的最长子数组(简洁易懂)
给你一个二进制数组 nums ,你需要从中删掉一个元素。请你在删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。如果不存在这样的子数组,请返回 0 。提示 1:输入:nums = [1,1,0,1]输出:3解释:删掉位置 2 的数后,[1,1,1] 包含 3 个 1 。示例 2:输入:nums = [0,1,1,1,0,1,1,0,1]输出:5解释:删掉位置 4 的数字后,[0,1,1,1,1,1,0,1] 的最长全 1 子数组为 [1,1,1,1,1] 。示例 3:原创 2020-06-28 00:27:15 · 278 阅读 · 0 评论 -
力扣 验证回文串(一些实用字符串函数)
islower(char c) 是否为小写字母 isupper(char c) 是否为大写字母 isdigit(char c) 是否为数字 isalpha(char c) 是否为字母 isalnum(char c) 是否为字母或者数字 toupper(char c) 字母小转大 tolower(char c) 字母大转小 c.begin() 返回一个迭代器,它指向容器c的第一个元...原创 2020-06-19 15:02:46 · 211 阅读 · 0 评论 -
力扣 1014.简单观光组合
思路:用maxn表示对于A【i】来说,之前的一个最大观光分值,res表示A【0】到A【i】的一对最大观光分值class Solution {public: int maxScoreSightseeingPair(vector<int>& A) { int res = 0; int maxn = A[0]; for(int i = 1;i < A.size();i++){ //因为距离,需要减一 .原创 2020-06-17 11:04:01 · 126 阅读 · 0 评论 -
力扣 第28场双周赛第3题(滑动窗口) 找两个和为目标值且不重叠的子数组
参考题解出处:ikaruga思路使用滑动窗口找出所有和为 target 的子数组使用 multimap 按照长度保存使用双循环依次遍历两个不同的子数组如果有交叉跳过,注意是按长度排的,要在前在后都判断记录最小值剪枝class Solution {public: int minSumOfLengths(vector<int>& arr, int target) { multimap<int,int> mp; in..转载 2020-06-14 22:30:27 · 218 阅读 · 0 评论 -
力扣 动态规划 使用最小花费爬楼梯
class Solution {public: int minCostClimbingStairs(vector<int>& cost) { cost.push_back(0); int p1=cost[1],p2=cost[0]; for(int i=2;i<cost.size();i++){ int tmp=p1; p1=min(p1,p2)+cost[i]; ..原创 2020-06-13 15:51:03 · 193 阅读 · 0 评论 -
力扣 三数之和 双指针
先将数组进行排序从左侧开始,选定一个值为 定值 ,右侧进行求解,获取与其相加为 0 的两个值类似于快排,定义首和尾首尾与 定值 相加等于 0,记录这三个值小于 0,首部右移大于 0,尾部左移定值右移,重复该步骤class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { sort(nums.begin(), nums.end()); .原创 2020-06-12 22:16:58 · 186 阅读 · 0 评论 -
单调栈 力扣 739. 每日温度
class Solution {public: vector<int> dailyTemperatures(vector<int>& T) { vector<int> res(T.size(),0); T.push_back(INT_MIN); stack<int> st; for(int i = 0;i < T.size();i++){ if(.原创 2020-06-11 15:55:08 · 231 阅读 · 0 评论 -
力扣(dfs解法)面试题29. 顺时针打印矩阵
class Solution {public: int move[4][2] = {0,1,1,0,0,-1,-1,0}; int book[105][105] = {0}; vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> res; if(matrix.size() == 0) return .原创 2020-06-05 10:54:35 · 202 阅读 · 0 评论 -
力扣(Dijkstra算法,Dijkstra+优先队列) 743. 网络延迟时间
class Solution {public: int networkDelayTime(vector<vector<int>>& times, int N, int K) { int arr[N+1][N+1]; //初始化 for(int i = 1;i <= N;i++){ for(int j = 1;j <= N;j++){ if(i ==..原创 2020-06-03 21:14:38 · 1100 阅读 · 0 评论 -
力扣 定长子串中元音的最大数目(前缀和解法)
给你字符串 s 和整数 k 。请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。英文中的 元音字母 为(a, e, i, o, u)。示例 1:输入:s = “abciiidef”, k = 3输出:3解释:子字符串 “iii” 包含 3 个元音字母。示例 2:输入:s = “aeiou”, k = 2输出:2解释:任意长度为 2 的子字符串都包含 2 个元音字母。示例 3:输入:s = “leetcode”, k = 3输出:2解释:“lee”、“eet原创 2020-05-24 13:25:17 · 221 阅读 · 0 评论 -
力扣 二叉树中的伪回文路径
给你一棵二叉树,每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的,当它满足:路径经过的所有节点值的排列中,存在一个回文序列。请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。输入:root = [2,3,1,3,1,null,1]输出:2解释:上图为给定的二叉树。总共有 3 条从根到叶子的路径:红色路径 [2,3,3] ,绿色路径 [2,1,1] 和路径 [2,3,1] 。在这些路径中,只有红色和绿色的路径是伪回文路径,因为红色路径 [2,3,3] 存在回文排列 [3,原创 2020-05-24 13:23:51 · 191 阅读 · 0 评论 -
双指针经典 力扣202.快乐数(快慢指针)
class Solution {public: int bitSquareSum(int n) { int sum = 0; while(n > 0) { int bit = n % 10; sum += bit * bit; n = n / 10; ...原创 2020-04-30 11:00:45 · 249 阅读 · 0 评论 -
leetcode.33. 搜索旋转排序数组(二分查找)
class Solution {public: int search(vector<int>& nums, int target) { int size = nums.size(); if (size == 0) return -1; int left = 0, right = size - 1; wh...原创 2020-04-25 15:35:39 · 144 阅读 · 0 评论 -
Leetcode 63. 不同路径 II 动态规划 (双百分之百代码)
class Solution {public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { //有测试用例是刚开始就是障碍。。。。狗的很 if(obstacleGrid[0][0] == 1) return 0; int r...原创 2020-03-18 18:59:25 · 151 阅读 · 0 评论 -
Leetcode 994. 腐烂的橘子(bfs解法)(不使用队列和使用队列)
class Solution {public: int orangesRotting(vector<vector<int>>& grid){ int move[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; vector<int> x; vector<int&g...原创 2020-03-15 21:18:55 · 1557 阅读 · 0 评论 -
Leetcode 695. 岛屿的最大面积(深搜+递归)
class Solution {public: int maxn = 0; int maxAreaOfIsland(vector<vector<int>>& grid) { int area = 0; for(int i = 0;i < grid.size();i++){ f...原创 2020-03-15 12:27:06 · 116 阅读 · 0 评论 -
Leetcode 300. 最长上升子序列最优解法0ms C++(转载一个优秀题解)
一步一步推导出官方最优解法,详细图解class Solution {public: int lengthOfLIS(vector<int>& nums) { vector<int> minnums; for(int i : nums){ if(!minnums.size() || i > mi...转载 2020-03-14 18:34:02 · 222 阅读 · 0 评论 -
Leetcode 169. 多数元素(摩尔投票法) C++
摩尔投票法(引用力扣题解评论):核心就是对拼消耗。玩一个诸侯争霸的游戏,假设你方人口超过总人口一半以上,并且能保证每个人口出去干仗都能一对一同归于尽。最后还有人活下来的国家就是胜利。class Solution {public: int majorityElement(vector<int>& nums) { int num = nums[0]...原创 2020-03-13 21:27:12 · 243 阅读 · 0 评论 -
力扣Leetcode 911. 在线选举详细注释(动态数组+二分查找) C++
在选举中,第 i 张票是在时间为 times[i] 时投给 persons[i] 的。现在,我们想要实现下面的查询函数: TopVotedCandidate.q(int t) 将返回在 t 时刻主导选举的候选人的编号。在 t 时刻投出的选票也将被计入我们的查询之中。在平局的情况下,最近获得投票的候选人将会获胜。示例:输入:[“TopVotedCandidate”,“q”,“q”,“q”,“...原创 2020-03-13 16:09:57 · 353 阅读 · 0 评论 -
力扣Leetcode 690. 员工的重要性 C++
递归做法:class Solution {public: int getImportance(vector<Employee*> employees, int id) { for(int i=0;i<employees.size();i++){ if(employees[i]->id == id){ ...原创 2020-03-12 21:18:17 · 205 阅读 · 0 评论 -
力扣Leetcode 1315. 祖父节点值为偶数的节点和 C++
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */c...原创 2020-03-12 16:00:26 · 322 阅读 · 0 评论