LeetCode
qq_1206630874
学生
展开
-
二叉树的最小深度(遍历)
leetcode链接题目:二叉树的最小深度给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。输入:root = [3,9,20,null,null,15,7]输出:2示例 2:输入:root = [2,null,3,null,4,null,5,null,6]输出:5第一次做的时候是11.11, 当时做了好一会,用的层次遍历,今天重新刷了一遍,完全凭感觉,递归就做出来了。思路也不是很清晰,就是ac了层次遍历cl原创 2021-12-09 21:31:25 · 391 阅读 · 0 评论 -
省份数量(深度优先遍历、图)
leetcode链接求图的连通分量个数题目有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。返回矩阵中 省份 的数原创 2021-12-01 14:24:50 · 208 阅读 · 0 评论 -
所有可能的路径(深度优先搜索、图)
leetcode链接分享原因:图的遍历 一直没怎么练过 目前的理解 就是回溯题目:给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)二维数组的第 i 个数组中的单元都表示有向图中 i 号节点所能到达的下一些节点,空就是没有下一个结点了。译者注:有向图是有方向的,即规定了 a→b 你就不能从 b→a 。class Solution {public: vector<vector<int>> r原创 2021-11-29 11:42:55 · 622 阅读 · 0 评论 -
位运算(最大单词长度乘积)
题目:leetcode链接给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。示例 1:输入: [“abcw”,“baz”,“foo”,“bar”,“xtfn”,“abcdef”]输出: 16解释: 这两个单词为 “abcw”, “xtfn”。示例 2:输入: [“a”,“ab”,“abc”,“d”,“cd”,“bcd”,“abc原创 2021-11-17 21:30:17 · 136 阅读 · 0 评论 -
双指针(剑指 Offer 57. 和为s的两个数字)
这题我觉得难在理解为什么双指针不会漏解:leetcode链接题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]class Solution {public:原创 2021-11-13 14:35:49 · 59 阅读 · 0 评论 -
C++、map使用(数组中重复的数字)
C++的map是真难用leetcode链接题目:找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3第一想法是循环,但是一直不会用C++的map 就试了下class Solution {public: int findRepeatNumber(vec原创 2021-11-12 21:17:59 · 982 阅读 · 0 评论 -
动态规划、背包(零钱兑换)
题目leetcode链接给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。示例 1:输入:coins = [1, 2, 5], amount = 11输出:3解释:11 = 5 + 5 + 1示例 2:输入:coins = [2], amount = 3输出:-1示例 3:输入:coins = [1],原创 2021-11-09 14:42:28 · 254 阅读 · 0 评论 -
子集(回溯)
leetcode链接给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]class Solution {public: vector<vector<int>> res;原创 2021-11-08 11:28:48 · 92 阅读 · 0 评论 -
回溯(全排列)
题目:全排列原题在这里就没想过能做出来,写着写着就好了给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]示例 3:输入:nums = [1]输出:[[1]]思路:依次以每个元素作为排列的第一个元素,这个元素加入之后,原创 2021-11-04 23:02:41 · 168 阅读 · 0 评论 -
动态规划、三指针(丑数||)
题目:丑数||给你一个整数 n ,请你找出并返回第 n 个 丑数 。丑数 就是只包含质因数 2、3 和/或 5 的正整数。原文在这里示例 1:输入:n = 10输出:12解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。示例 2:输入:n = 1输出:1解释:1 通常被视为丑数。class Solution {public: int nthUglyNumber(int n) { vector<int翻译 2021-11-02 20:58:18 · 77 阅读 · 0 评论 -
贪心、双指针(盛最多水的容器)
题目:盛最多水的容器平时做题少,双指针的问题遇到过一两次,在贪心里是个比较好的思路吧,记下来原文在这里给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水翻译 2021-11-02 15:48:26 · 104 阅读 · 0 评论 -
深度优先遍历、回溯(组合总和|||)
题目:组合总和|||找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。示例 1:输入: k = 3, n = 7输出: [[1,2,4]]示例 2:输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]class Solution {public: vector<vector<int>> res;原创 2021-11-01 21:50:21 · 114 阅读 · 0 评论 -
回溯、递归(组合)
题目:组合给定一个无重复元素的正整数数组 candidates 和一个正整数 target ,找出 candidates 中所有可以使数字和为目标数 target 的唯一组合。candidates 中的数字可以无限制重复被选取。如果至少一个所选数字数量不同,则两种组合是唯一的。对于给定的输入,保证和为 target 的唯一组合数少于 150 个。示例 1:输入: candidates = [2,3,6,7], target = 7输出: [[7],[2,2,3]]示例 2:输入: candi原创 2021-11-01 20:01:17 · 66 阅读 · 0 评论 -
搜索、回溯(组合)
题目:组合leetcode链接这种题真的好厉害!给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例 1:输入:n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]示例 2:输入:n = 1, k = 1输出:[[1]]class Solution {private: vector<vector<int>> result;翻译 2021-10-31 21:46:28 · 80 阅读 · 0 评论 -
动态规划(打家劫舍)
分享原因:这题自己做出来过,但是很复杂,看了官方写的特别好,记一下题目:原文链接你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。翻译 2021-10-23 23:34:33 · 51 阅读 · 0 评论 -
题目:对称二叉树(递归)
leetcode原版题目:思路:如果树本身为空 那么就是对称的,如果有两个非空子树,分别成为左树和右树,如果镜像对称的话,那么左树的左子树和右树的右子树节点相同且其子树dui,且左树的右子树和右树的左子树节点相同...原创 2021-09-02 21:09:02 · 51 阅读 · 0 评论 -
题目:买卖股票的最佳时机 II(动态规划、贪心)
题目:给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: prices = [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格翻译 2021-09-02 19:45:41 · 100 阅读 · 0 评论 -
题目:买卖股票的最佳时机(贪心)
leetcode原版题目:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5翻译 2021-09-02 15:46:16 · 173 阅读 · 0 评论 -
题目: 最佳买卖股票时机含冷冻期(动态规划)
leetcode原版题目:给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]思路与算法:我们用 f[i]f[i] 表示第 ii 天结束翻译 2021-09-01 23:00:35 · 75 阅读 · 0 评论 -
题目:大礼包(深度优先搜索)
leetcode原版解析题目: 在商店中, 有许多在售的物品。 然而,也有一些大礼包,每个大礼包以优惠的价格捆绑销售一组物品。 现给定每个物品的价格,每个大礼包包含物品的清单,以及待购物品清单。请输出确切完成待购清单的最低花费。 每个大礼包的由一个数组中的一组数据描述,最后一个数字代表大礼包的价格,其他数字分别表示内含的其他种类物品的数量。 任意大礼包可无限次购买。 示例 1: 输入: [2,5], [3,2], [[3,0,5],[1,2,10]] 输出: 14 解释翻译 2021-09-01 20:20:08 · 169 阅读 · 0 评论 -
题目:不同路径(动态规划)
leetcode不同路径题目描述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?思路与算法:我们用 f(i, j)f(i,j) 表示从左上角走到 (i, j)(i,j) 的路径数量,其中 ii 和 jj 的范围分别是 [0, m)[0,m) 和 [0, n)[0,n)。由于我们每一步只能从向下或者向右移动一步,因此要想走到 (i,翻译 2021-08-31 23:02:45 · 157 阅读 · 0 评论 -
题目:使用最小花费爬楼梯(动态规划)
使用最小花费爬楼梯动态规划问题描述:数组的每个索引作为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始)。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。示例 1:输入: cost = [10, 15, 20]输出: 15解释: 最低花费是从cost[1]开始,然后走两步即可到阶梯顶,一共花费15。示例 2:输入: c翻译 2021-08-31 22:45:47 · 125 阅读 · 0 评论 -
题目:课程表(深度优先遍历)
@课程表东华oj 第71题 课程表 C++ 深度优先遍历没错 看懂之后抄的!我也不知道咋学代码片.class Solution {private: //edges 邻接表 vector<vector<int>> edges; //三个状态,0 未遍历,1正在遍历,2已经遍历 vector<int> visited; //遍历过程中 没有出现环 bool valid = true;public: void d翻译 2021-08-31 21:25:55 · 75 阅读 · 0 评论 -
题目:课程表(广度优先遍历)
LeetCode课程表广度优先遍历方法 【C++】 东华oj 第71题class Solution {private: vector<vector<int>> edges; vector<int> indeg;public: bool canFinish(int numCourses, vector<vector<int>>& prerequisites) { edges.resize(翻译 2021-08-31 21:44:52 · 85 阅读 · 0 评论