lectcode
易殇
热爱生活
展开
-
把二叉搜索树转换为累加树
把二叉搜索树转换为累加树二叉搜索树二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。示例输入: 二叉搜索树:5/ \ 2 13输...原创 2020-02-09 00:24:17 · 704 阅读 · 0 评论 -
最小路径和
最小路径和给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例输入:[ [1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。代码递归暴力法int calculate(vector&l...原创 2020-02-06 17:32:19 · 713 阅读 · 0 评论 -
二叉树的中序遍历
二叉树的中序遍历递归法vector<int> res;vector<int> inorderTraversal(TreeNode* root) { if(!root) return res; if(root->left) inorderTraversal(root->left); res.push_back(root->...原创 2020-02-04 17:40:07 · 376 阅读 · 0 评论 -
lectcode-任务调度
要求给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。CPU 在任何一个单位时间内都可以执行一个任务,或者在待命状态。然而,两个相同种类的任务之间必须有长度为 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命...原创 2020-02-04 17:39:34 · 318 阅读 · 0 评论 -
lectcode-最短无序连续子数组
要求给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例输入: [2, 6, 4, 8, 10, 9, 15]输出: 5解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。代码先排序后比较int findUnsortedSubarr...原创 2020-02-03 19:13:38 · 191 阅读 · 0 评论 -
lectcode-旋转图像
要求给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。代码转置加反转void rotate(vector<vector<int>>& matrix) { int m = matrix.size(...原创 2020-02-02 20:34:17 · 232 阅读 · 0 评论 -
174届lectcode周赛总结
第一题要求给你一个大小为 m * n 的方阵 mat,方阵由若干军人和平民组成,分别用 0 和 1 表示。请你返回方阵中战斗力最弱的 k 行的索引,按从最弱到最强排序。如果第 i 行的军人数量少于第 j 行,或者两行军人数量相同但 i 小于 j,那么我们认为第 i 行的战斗力比第 j 行弱。军人 总是 排在一行中的靠前位置,也就是说 1 总是出现在 0 之前。示例示例 1:输入:m...原创 2020-02-02 18:33:16 · 778 阅读 · 1 评论 -
求二叉树的最大深度
求二叉树的最大深度递归法(深度优先)int maxDepth(TreeNode* root) { if(root==nullptr) return 0; int l = maxDepth(root->left)+1; int r = maxDepth(root->right)+1; return l>r?l:r;栈实现深度遍历找深度int m...原创 2020-02-01 18:07:58 · 310 阅读 · 0 评论 -
lectcode - 买卖股票的最佳时机
要求给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = ...原创 2020-01-31 17:18:11 · 203 阅读 · 0 评论 -
lectcode - 全排列(回溯法)
要求给定一个没有重复数字的序列,返回其所有可能的全排列。示例输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]代码回溯法vector<vector<int>> permute(vector<int>& nums) { vector&...原创 2020-01-31 16:41:18 · 385 阅读 · 0 评论 -
lectcode-整数的各位积和之差
要求给你一个整数 n,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。示例示例 1:输入:n = 234输出:15解释:各位数之积 = 2 * 3 * 4 = 24各位数之和 = 2 + 3 + 4 = 9结果 = 24 - 9 = 15示例 2:输入:n = 4421输出:21解释:各位数之积 = 4 * 4 * 2 * 1 = 32各位数...原创 2020-01-30 22:52:08 · 286 阅读 · 0 评论 -
lectcode-搜索二维矩阵Ⅱ
要求编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, ...原创 2020-01-30 22:31:37 · 163 阅读 · 0 评论 -
lectcode-二叉树的最近公共祖先
要求给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”代码递归TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, Tr...原创 2020-01-30 21:17:57 · 160 阅读 · 0 评论 -
lectcode-寻找重复数
要求给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3代码先排序,再寻找int findDuplicate(vec...原创 2020-01-29 20:01:18 · 227 阅读 · 0 评论 -
实现前缀树
实现前缀树Trie (发音为 “try”) 或前缀树是一种树数据结构,用于检索字符串数据集中的键。这一高效的数据结构有多种应用:自动补全拼写检查最长前缀匹配打字预测代码private:bool isEnd = false;Trie *next[26] = {nullptr};public:/** Initialize your data structure here. *...原创 2020-01-29 16:17:36 · 244 阅读 · 0 评论 -
lectcode-课程表(拓扑排序)
要求现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,判断是否可能完成所有课程的学习?示例示例 1:输入: 2, [[1,0]]输出: true解释: 总共有 2 门课程。学...原创 2020-01-29 13:08:27 · 256 阅读 · 0 评论 -
lectcode-移动0
要求给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序示例示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]代码直接法void moveZeroes(vector<int>& nums) { int end = nums.size()-1; int i = 0; while...原创 2020-01-28 22:04:42 · 162 阅读 · 0 评论 -
lectcode-岛屿数量
要求给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3代码递归遍...原创 2020-01-28 14:14:05 · 335 阅读 · 0 评论 -
lectcode-反转二叉树
翻转二叉树采用递归法TreeNode* invertTree(TreeNode* root) { if(root==nullptr) return root; TreeNode *l = invertTree(root->right); TreeNode *r = invertTree(root->left); root->left ...原创 2020-01-27 18:20:12 · 164 阅读 · 0 评论 -
lectcode-打家劫舍(动态规划)
要求你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后...原创 2020-01-27 17:05:35 · 178 阅读 · 0 评论 -
lectcode-多数元素
要求给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2代码暴力法int majorityElement(vector<int...原创 2020-01-27 14:20:20 · 518 阅读 · 0 评论 -
lectcode-最小栈
要求设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。代码链表自行构造栈class MinStack {public:typedef struct StackNo...原创 2020-01-26 23:39:58 · 194 阅读 · 0 评论 -
lectcode-乘积最大序列
要求给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。示例示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。代码动态规划int maxProduct(vec...原创 2020-01-26 20:28:21 · 274 阅读 · 0 评论 -
lectcode-排序链表
要求在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5代码归并排序法ListNode...原创 2020-01-26 19:23:30 · 223 阅读 · 0 评论 -
lectcode-LRU缓存机制
要求运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使...原创 2020-01-25 17:05:52 · 166 阅读 · 0 评论 -
lectcode-相同的树
要求给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例示例 1:输入:1 1/ \ / 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入:1 1/ 2 2...原创 2020-01-25 01:21:16 · 149 阅读 · 0 评论 -
lectcode-两数之和Ⅱ-输入有序数组
要求给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素示例示例:输入: numbers = [...原创 2020-01-20 20:52:49 · 153 阅读 · 0 评论 -
lectcode-寻找峰值
要求峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。示例示例 1:输入: nums = [1,2,3,1]输出: 2解释: 3 是峰值元素,你的函...原创 2020-01-20 20:24:19 · 187 阅读 · 0 评论 -
lectcode-寻找旋转数组中的最小值
要求假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。示例示例 1:输入: [3,4,5,1,2]输出: 1示例 2:输入: [4,5,6,7,0,1,2]输出: 0代码二分法-寻找落差位置int findMin(...原创 2020-01-19 23:00:59 · 186 阅读 · 0 评论 -
lectcode-搜索旋转排序数组Ⅱ
要求假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。示例示例 1:输入: nums = [2,5,6,0,0,1,2], ta...原创 2020-01-19 20:31:19 · 229 阅读 · 0 评论 -
lectcode-搜索二维矩阵
要求编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例示例 1:输入:matrix = [[1, 3, 5, 7],[10, 11, 16, 20],[23, 30, 34, 50]]target = 3输出: true...原创 2020-01-19 19:46:46 · 189 阅读 · 0 评论 -
lectcode-x的平方根
要求实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。代码...原创 2020-01-18 22:20:28 · 149 阅读 · 0 评论 -
lectcode-pow(x,n)
要求实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25代码直接暴力法double m...原创 2020-01-18 18:44:21 · 197 阅读 · 0 评论 -
lectcode-有效的括号
要求给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出:...原创 2020-01-18 14:50:07 · 162 阅读 · 0 评论 -
lectcode-最长公共前缀
要求编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀代码横向扫描法string longestCommonPref...原创 2020-01-16 23:17:15 · 190 阅读 · 0 评论 -
lectcode-z字形变换
z字形变换将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。示例示例&nbs...原创 2020-01-16 18:31:52 · 156 阅读 · 0 评论 -
lectcode- 合并两个有序数组
要求给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。...原创 2020-01-16 16:44:10 · 161 阅读 · 0 评论 -
lectcode-加一
要求给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示...原创 2020-01-13 20:59:56 · 159 阅读 · 0 评论 -
lectcode-最后一个单词的长度
要求给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。如果不存在最后一个单词,请返回 0 。示例输入: “Hello World”输出: 5代码int lengthOfLastWord(string s) { int n = s.length(),re...原创 2020-01-13 20:23:38 · 161 阅读 · 0 评论 -
lectcode-数组-最大自序和
要求给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和示例输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。代码暴力解法int maxSubArray(vector<int>& nums) { int sum = 0,m...原创 2020-01-11 23:29:21 · 211 阅读 · 0 评论