
算法
文章平均质量分 50
编程小耗子
本人比较喜欢高性能服务器开发。
在校曾获奖:
中国大学生计算机设计大赛国赛三等奖;
龙鼎杯河北二等奖;
蓝桥杯省赛三等奖;
CCPC河北省赛三等奖;
展开
-
leetcode 404. 左叶子之和
题目: 404. 左叶子之和404. 左叶子之和难度简单计算给定二叉树的所有左叶子之和。示例: 3 / \ 9 20 / \ 15 7在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24解题思路递归判断该结点是不是叶子,同时传入参数告诉该结点,是不是左子树。同时满足叶子结点且是左子树,则加入总和中。代码class Solution {private: int sum;public: int sumOfLeftL原创 2021-02-21 12:32:58 · 130 阅读 · 0 评论 -
leetcode 807. 保持城市天际线
题目: 807. 保持城市天际线807. 保持城市天际线难度中等在二维数组grid中,grid[i][j]代表位于某处的建筑物的高度。 我们被允许增加任何数量(不同建筑物的数量可能不同)的建筑物的高度。 高度 0 也被认为是建筑物。最后,从新数组的所有四个方向(即顶部,底部,左侧和右侧)观看的“天际线”必须与原始数组的天际线相同。 城市的天际线是从远处观看时,由所有建筑物形成的矩形的外部轮廓。 请看下面的例子。建筑物高度可以增加的最大总和是多少?例子:输入: grid = [[3,0,8,4]原创 2021-02-21 11:18:18 · 235 阅读 · 0 评论 -
leetcode 543. 二叉树的直径
题目: 543. 二叉树的直径543. 二叉树的直径难度简单613收藏分享切换为英文接收动态反馈给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。解题思路一个树中最长的结点链接是左原创 2021-02-21 10:40:45 · 153 阅读 · 0 评论 -
leetcode 17. 电话号码的字母组合
题目: 17. 电话号码的字母组合17. 电话号码的字母组合难度中等给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]示例 2:输入:digits = ""输出:[]示例 3:输入:digits = "2"输出:["a","b原创 2021-02-20 21:31:36 · 202 阅读 · 0 评论 -
leetcode 113. 路径总和 II
题目: 113. 路径总和 II113. 路径总和 II难度中等426收藏分享切换为英文接收动态反馈给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \原创 2021-02-20 20:49:39 · 258 阅读 · 0 评论 -
leetcode 112. 路径总和
题目: 112. 路径总和112. 路径总和难度简单513收藏分享切换为英文接收动态反馈给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true示例 2:[外链图片转存失败,源原创 2021-02-20 18:43:50 · 187 阅读 · 0 评论 -
leetcode 226. 翻转二叉树
题目: 226. 翻转二叉树226. 翻转二叉树难度简单翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1解题思路递归该树,并将左右子树交换即可。代码class Solution {public: TreeNode* invertTree(TreeNode* root) { if (!root) r原创 2021-02-20 18:29:39 · 145 阅读 · 0 评论 -
leetcode 232. 用栈实现队列
题目: 232. 用栈实现队列232. 用栈实现队列难度简单请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 pus原创 2021-02-20 18:19:05 · 153 阅读 · 0 评论 -
leetcode 59. 螺旋矩阵 II
题目: 160. 相交链表59. 螺旋矩阵 II难度中等300收藏分享切换为英文接收动态反馈给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例 1:输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2:输入:n = 1输出:[[1]]提示:1 <= n <= 20解题思路首先初始化ans数组大小。设置一个visit数组,代表是否走过该位置。然后通原创 2021-02-20 17:18:09 · 234 阅读 · 0 评论 -
leetcode 160. 相交链表
题目: 160. 相交链表160. 相交链表难度简单编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表**:**在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始原创 2021-02-20 16:53:28 · 167 阅读 · 0 评论 -
leetcode 39. 组合总和
题目: 39. 组合总和39. 组合总和难度中等给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入:candidates = [2,3,6,7], target = 7,所求解集为:[ [7], [2,2,3]]示例 2:输入:ca原创 2021-02-20 15:51:11 · 125 阅读 · 0 评论 -
leetcode 153. 寻找旋转排序数组中的最小值
题目: 153. 寻找旋转排序数组中的最小值153. 寻找旋转排序数组中的最小值难度中等假设按照升序排序的数组在预先未知的某个点上进行了旋转。例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] 。请找出其中最小的元素。示例 1:输入:nums = [3,4,5,1,2]输出:1示例 2:输入:nums = [4,5,6,7,0,1,2]输出:0示例 3:输入:nums = [1]输出:1提示:1 <= nums.length &l原创 2021-02-20 11:38:50 · 149 阅读 · 0 评论 -
leetcode 169. 多数元素
## 题目: 169. 多数元素#### [169. 多数元素](https://leetcode-cn.com/problems/majority-element/)难度简单给定一个大小为 *n* 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 **大于** `⌊ n/2 ⌋` 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。**示例 1:**```输入:[3,2,3]输出:3```**示例 2:**```输入:[2,2,1,1,1,.原创 2021-02-20 09:46:19 · 221 阅读 · 0 评论 -
leetcode 215. 数组中的第K个最大元素
题目: 215. 数组中的第K个最大元素215. 数组中的第K个最大元素难度中等在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。通过次数259,994提交次数401,273解题思路快排原创 2021-02-19 23:28:12 · 197 阅读 · 0 评论 -
leetcode 21. 合并两个有序链表
题目:21. 合并两个有序链表21. 合并两个有序链表难度简单将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是 [0, 50]-100 <= Node.val <原创 2021-02-19 22:43:27 · 181 阅读 · 0 评论 -
leetcode 103. 二叉树的锯齿形层序遍历
题目:103. 二叉树的锯齿形层序遍历103. 二叉树的锯齿形层序遍历难度中等给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层序遍历如下:[ [3], [20,9], [15,7]]解题思路通过两个栈,分别存储当前层的数据,还有下一层的数据。因原创 2021-02-19 19:00:05 · 141 阅读 · 0 评论 -
leetcode 958. 二叉树的完全性检验
题目:958. 二叉树的完全性检验958. 二叉树的完全性检验难度中等给定一个二叉树,确定它是否是一个完全二叉树。百度百科中对完全二叉树的定义如下:若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2h 个节点。)示例 1:输入:[1,2,3,4,5,6]输出:true解释:最后一层前的每一层都是满的(即,结点值为 {1} 和 {2,3} 的两层),且最后一层原创 2021-02-19 13:42:28 · 208 阅读 · 0 评论 -
leetcode 695. 岛屿的最大面积
题目:695. 岛屿的最大面积695. 岛屿的最大面积给定一个包含了一些 0 和 1 的非空二维数组 grid 。一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)示例 1:[[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0], [0,原创 2021-02-19 13:13:08 · 112 阅读 · 0 评论 -
leetcode 146. LRU 缓存机制
题目:146. LRU 缓存机制146. LRU 缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键原创 2021-02-19 10:46:41 · 148 阅读 · 0 评论 -
leetcode 129. 求根到叶子节点数字之和
题目:129. 求根到叶子节点数字之和129. 求根到叶子节点数字之和给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 25解释:从根到叶子节点路径 1->2 代表数字 12.从根到叶子节点路径 1-&g原创 2021-02-18 23:33:18 · 188 阅读 · 0 评论 -
leetcode 121. 买卖股票的最佳时机
题目:121. 买卖股票的最佳时机121. 买卖股票的最佳时机给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时原创 2021-02-18 22:31:53 · 122 阅读 · 0 评论 -
leetcode 25. K 个一组翻转链表
题目:K 个一组翻转链表25. K 个一组翻转链表给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4->5解题思路例如:1->2-原创 2021-02-18 22:12:32 · 137 阅读 · 0 评论 -
leetcode 105. 从前序与中序遍历序列构造二叉树
从前序与中序遍历序列构造二叉树105. 从前序与中序遍历序列构造二叉树根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7解题思路通过递归的方法,不断缩小树的范围,将树拆解到叶子,再将叶子赋值到左或者右子树上即可。(第一次写题解,多多谅解,原创 2021-02-18 15:10:29 · 150 阅读 · 0 评论 -
leetcode 3. 无重复字符的最长子串
无重复字符的最长子串3. 无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注原创 2021-02-18 15:09:37 · 101 阅读 · 0 评论