leetcode
lujian233
这个作者很懒,什么都没留下…
展开
-
2020-08-20
原文哲学家就餐哲学家从 0 到 4 按 顺时针 编号。请实现函数 void wantsToEat(philosopher, pickLeftFork, pickRightFork, eat, putLeftFork, putRightFork):philosopher 哲学家的编号。pickLeftFork 和 pickRightFork 表示拿起左边或右边的叉子。eat 表示吃面。putLeftFork 和 putRightFork 表示放下左边或右边的叉子。由于哲学家不是在吃面就是在想着啥转载 2020-08-20 21:37:36 · 165 阅读 · 0 评论 -
377. 组合总和 Ⅳ
给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数。示例:nums = [1, 2, 3]target = 4所有可能的组合为:(1, 1, 1, 1)(1, 1, 2)(1, 2, 1)(1, 3)(2, 1, 1)(2, 2)(3, 1)请注意,顺序不同的序列被视作不同的组合。因此输出为 7。来源:力扣(LeetCode)链接:传送门著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。超时dfs:class Solution原创 2020-08-20 11:08:25 · 148 阅读 · 0 评论 -
738. 单调递增的数字
给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/monotone-increasing-digits著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。注意333222这种情况 应该返回299999而不是332999c原创 2020-08-16 02:20:57 · 307 阅读 · 0 评论 -
901. 股票价格跨度
编写一个 StockSpanner 类,它收集某些股票的每日报价,并返回该股票当日价格的跨度。今天股票价格的跨度被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。例如,如果未来7天股票的价格是 [100, 80, 60, 70, 60, 75, 85],那么股票跨度将是 [1, 1, 1, 2, 1, 4, 6]。提示:调用 StockSpanner.next(int price) 时,将有 1 <= price <= 10^5。每个测试用例最多可以调用原创 2020-08-12 11:17:49 · 104 阅读 · 0 评论 -
1156. 单字符重复子串的最大长度
leetcode两种情况,交换或者不交换,交换的情况又分两种,交换后只多一个,交换后多了一串,aaabbaaa 这种是交换后只多一个的情况, aaabaaa交换后多一串的情况,abcdf不交换的情况。遍历两次就行,第一次记录每个字符总数,和不交换情况下最长长度第二次考虑交换的情况class Solution {public: int maxRepOpt1(string text) { if(text.size() == 0) return 0; map&l.原创 2020-08-10 16:04:01 · 255 阅读 · 0 评论 -
659. 分割数组为连续子序列
给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3 。如果可以完成上述分割,则返回 true ;否则,返回 false 。来源:力扣(LeetCode)链接:添加链接描述贪心算法:思路分析: 分析i时,先查找有没有以i-1结尾的子序列,有则接着,没有则需要新建长度最小的序列【i, i+1, i+2】。class Solution {public: bool isPossible(vector<原创 2020-07-28 02:13:35 · 178 阅读 · 0 评论 -
152. 乘积最大子数组
给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。leetcode动态规划:dp[i]表示以i结尾的连续子数组的最大乘积,最后返回dp[0]到dp[n-1]中最大的值class Solution {public: int maxProduct(vector<int>& nums) { vector<int> maxf(nums), minf(nums);原创 2020-07-27 02:01:38 · 82 阅读 · 0 评论 -
329. 矩阵中的最长递增路径
给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。leetcode记忆化dfs:class Solution {public: int dir[5] = {1, 0, -1, 0, 1}; int row, col; int dfs(vector<vector<int>>& road, vector<vector<int>原创 2020-07-26 15:22:41 · 83 阅读 · 0 评论 -
783. 二叉搜索树节点最小距离
定一个二叉搜索树的根节点 root,返回树中任意两节点的差的最小值。leetcode中序遍历:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Sol原创 2020-07-24 01:57:31 · 121 阅读 · 0 评论 -
双栈实现队列
class CQueue {public: stack<int> s1; stack<int> s2; CQueue() { while(!s1.empty()) s1.pop(); while(!s2.empty()) s2.pop(); } void appendTail(int value) { s1.push(value); } int d原创 2020-07-21 16:22:13 · 86 阅读 · 0 评论 -
不同的二叉搜索树 II
给定一个整数 n,生成所有由 1 … n 为节点所组成的 二叉搜索树 。添加链接描述递归:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int原创 2020-07-21 10:44:40 · 84 阅读 · 0 评论 -
312. 戳气球
有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。如果你戳破气球 i ,就可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i 后,气球 left 和气球 right 就变成了相邻的气球。求所能获得硬币的最大数量。来源:力扣(LeetCode)添加链接描述反向思考,每次添加一个气球,直到添满得到最大值原创 2020-07-20 16:24:47 · 68 阅读 · 0 评论 -
97. 交错字符串
给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。示例 1:输入: s1 = “aabcc”, s2 = “dbbca”, s3 = “aadbbcbcac”输出: true示例 2:输入: s1 = “aabcc”, s2 = “dbbca”, s3 = “aadbbbaccc”输出: false来源:力扣(LeetCode)添加链接描述动态规划class Solution {public: bool isInterleave(strin原创 2020-07-18 02:34:36 · 82 阅读 · 0 评论 -
926. 将字符串翻转到单调递增
如果一个由 ‘0’ 和 ‘1’ 组成的字符串,是以一些 ‘0’(可能没有 ‘0’)后面跟着一些 ‘1’(也可能没有 ‘1’)的形式组成的,那么该字符串是单调递增的。我们给出一个由字符 ‘0’ 和 ‘1’ 组成的字符串 S,我们可以将任何 ‘0’ 翻转为 ‘1’ 或者将 ‘1’ 翻转为 ‘0’。返回使 S 单调递增的最小翻转次数。来源:力扣(LeetCode)链接:添加链接描述著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。前缀和:class Solution {publ原创 2020-07-16 16:39:23 · 163 阅读 · 0 评论 -
785. 判断二分图
给定一个无向图graph,当这个图为二分图时返回true。如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我们就将这个图称为二分图。graph将会以邻接表方式给出,graph[i]表示图中与节点i相连的所有节点。每个节点都是一个在0到graph.length-1之间的整数。这图中没有自环和平行边: graph[i] 中不存在i,并且graph[i]中没有重复的值。来源:力扣(LeetCode)添加链接描述我的代码:广度优先遍历,原创 2020-07-16 01:50:24 · 134 阅读 · 0 评论 -
96. 不同的二叉搜索树
给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:来源:力扣(LeetCode)添加链接描述我的代码:class Solution {public: int numTrees(int n) { int dp[n+1]; if(n == 1) return 1; if(n == 2) return 2; dp[0] = 1; dp[1] = 1; dp[2] = 2;原创 2020-07-15 02:17:58 · 90 阅读 · 0 评论 -
786. 第 K 个最小的素数分数
一个已排序好的表 A,其包含 1 和其他一些素数. 当列表中的每一个 p<q 时,我们可以构造一个分数 p/q 。那么第 k 个最小的分数是多少呢? 以整数数组的形式返回你的答案, 这里 answer[0] = p 且 answer[1] = q.示例:输入: A = [1, 2, 3, 5], K = 3输出: [2, 5]解释:已构造好的分数,排序后如下所示:1/5, 1/3, 2/5, 1/2, 3/5, 2/3.很明显第三个最小的分数是 2/5.输入: A = [1, 7原创 2020-07-14 17:42:27 · 185 阅读 · 1 评论 -
面试题 16.25. LRU缓存
设计和构建一个“最近最少使用”缓存,该缓存会删除最近最少使用的项目。缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量。当缓存被填满时,它应该删除最近最少使用的项目。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少原创 2020-07-14 11:23:40 · 206 阅读 · 0 评论 -
120. 三角形最小路径和
题目:添加链接描述给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。例如,给定三角形:[[2],[3,4],[6,5,7],[4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。int minimumTotal(vector<vector<int>> &triangle){原创 2020-07-14 10:14:08 · 70 阅读 · 0 评论 -
309. 最佳买卖股票时机含冷冻期
给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]来源:力扣(LeetCode)添加链接描述class Solution {public原创 2020-07-12 17:28:36 · 55 阅读 · 0 评论 -
174. 地下城游戏
一些恶魔抓住了公主(P)并将她关在了地下城的右下角。地下城是由 M x N 个房间组成的二维网格。我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0 或以下,他会立即死亡。有些房间由恶魔守卫,因此骑士在进入这些房间时会失去健康点数(若房间里的值为负整数,则表示骑士将损失健康点数);其他房间要么是空的(房间里的值为 0),要么包含增加骑士健康点数的魔法球(若房间里的值为正整数,则表示骑士将增加健康点数原创 2020-07-12 14:45:36 · 79 阅读 · 0 评论 -
93. 复原IP地址
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 ‘.’ 分隔。示例:输入: “25525511135”输出: [“255.255.11.135”, “255.255.111.35”]来源:力扣(LeetCode)添加链接描述。class Solution {public: vector<string> res; bool valid(const strin原创 2020-07-12 12:01:03 · 250 阅读 · 0 评论 -
920. 播放列表的数量
题目:添加链接描述动态规划:dp[i][j] 表示长度为i的列表包括j首不同的歌的歌单数目;class Solution {public: int numMusicPlaylists(int N, int L, int K) { long long mod = 1000000007; vector<vector<long long> > dp(L+1,vector<long long>(N+1,0)); dp原创 2020-07-09 16:21:03 · 156 阅读 · 4 评论 -
面试题 17.13. 恢复空格
哦,不!你不小心把一个长篇文章中的空格、标点都删掉了,并且大写也弄成了小写。像句子"I reset the computer. It still didn’t boot!“已经变成了"iresetthecomputeritstilldidntboot”。在处理标点符号和大小写之前,你得先把它断成词语。当然了,你有一本厚厚的词典dictionary,不过,有些词没在词典里。假设文章用sentence表示,设计一个算法,把文章断开,要求未识别的字符最少,返回未识别的字符数。注意:本题相对原题稍作改动,只需返回原创 2020-07-09 11:23:01 · 103 阅读 · 0 评论 -
1016. 子串能表示从 1 到 N 数字的二进制串
给定一个二进制字符串 S(一个仅由若干 ‘0’ 和 ‘1’ 构成的字符串)和一个正整数 N,如果对于从 1 到 N 的每个整数 X,其二进制表示都是 S 的子串,就返回 true,否则返回 false。来源:力扣(LeetCode)添加链接描述class Solution {public:string to_str(int N) { string str = ""; int tmp; while(N) {原创 2020-07-07 12:11:15 · 216 阅读 · 0 评论 -
1003. 检查替换后的词是否有效
给定有效字符串 “abc”。对于任何有效的字符串 V,我们可以将 V 分成两个部分 X 和 Y,使得 X + Y(X 与 Y 连接)等于 V。(X 或 Y 可以为空。)那么,X + “abc” + Y 也同样是有效的。例如,如果 S = “abc”,则有效字符串的示例是:“abc”,“aabcbc”,“abcabc”,“abcabcababcc”。无效字符串的示例是:“abccba”,“ab”,“cababc”,“bac”。如果给定字符串 S 有效,则返回 true;否则,返回 false。示例 1原创 2020-07-06 17:26:36 · 80 阅读 · 0 评论 -
63. 不同路径 II
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。说明:m 和 n 的值均不超过 100。示例 1:输入:[ [0,0,0],[0,1,0],[0,0,0] ]输出: 2解释:3x3 网格的正中间有一个障碍物。从左上角到右下角一原创 2020-07-06 01:17:56 · 1379 阅读 · 0 评论 -
44. 通配符匹配
给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。‘?’ 可以匹配任何单个字符。‘*’ 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例 1:输入:s = “aa”p = “a”输出: false解释: “a” 无法匹配 “aa” 整个字符串。示例 2:输入:s = “aa”p = ""输原创 2020-07-05 12:06:40 · 133 阅读 · 0 评论 -
32. 最长有效括号
给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()"stack:class Solution {public: int longestValidParentheses(string s) { stack<int> st; int count =原创 2020-07-04 11:42:23 · 59 阅读 · 0 评论