算法
文章平均质量分 59
麦田里的哈士奇
这个作者很懒,什么都没留下…
展开
-
Leetcode Jewels and Stones 哈希表
给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。示例 1:输入: J = "aA", S = "aAAbbbb"输出: 3示例 2:输入: J = "z", S = "ZZ"输出:原创 2018-05-18 23:58:24 · 134 阅读 · 0 评论 -
n个骰子求和
描述扔n个骰子,向上面的数字之和为S。给定 Givenn,请列出所有可能的S值及其相应的概率。样例给定n = 1,返回[ [1, 0.17], [2, 0.17], [3, 0.17], [4, 0.17], [5, 0.17], [6, 0.17]]。 这是剑指offer的一道题,主要思想为动态规划,由于投n个骰子出现的点数为n~6n...原创 2018-05-13 13:05:18 · 791 阅读 · 2 评论 -
圆圈中最后剩下的数字
题目描述有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数….这样下去….直到剩下最后一个小朋友,求最后一个小朋友的编号 (注:小朋友的编号是从0到n-1)这道题是著名的约瑟夫环问题,举个例子,现在有6个人,编号从0到5,每次删除第3个人。 第一次删除2,...原创 2018-05-13 19:25:27 · 174 阅读 · 0 评论 -
LeetCode Best Time to Buy and Sell Stock买卖股票的最佳时机-系列
这是leetcode买卖股票系列的一个总结,难度由浅入深,参考了其他博文,在此罗列如下,特表感谢:https://blog.csdn.net/u012501459/article/details/46514309https://blog.csdn.net/linhuanmars/article/details/23236995https://www.cnblogs.com/grandy...原创 2018-05-14 16:29:25 · 311 阅读 · 0 评论 -
Find the Duplicate Number寻找重复数(剑指offer,寻找重复的数)
给定一个包含n+ 1 个整数的数组nums,其数字都在 1 到n之间,包括 1 和n,可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明:不能更改原数组(假设数组是只读的)。 只能使用额外的 O(1) 的空间。 时间...原创 2018-05-25 14:09:25 · 672 阅读 · 0 评论 -
Search a 2D Matrix I Search a 2D Matrix II 搜索二维矩阵
编写一个高效的算法来搜索 m x n 矩阵中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。例如,给定以下矩阵 matrix :[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21,...原创 2018-05-25 16:23:56 · 107 阅读 · 0 评论 -
空格替换 lintcode
描述设计一种方法,将一个字符串中的所有空格替换成 %20 。你可以假设该字符串有足够的空间来加入新的字符,且你得到的是“真实的”字符长度。你的程序还需要返回被替换后的字符串的长度。样例对于字符串"Mr John Smith", 长度为 13替换空格之后,参数中的字符串需要变为"Mr%20John%20Smith",并且把新长度 17 作为结果返回。挑战在原字符串(字符数组)中完成替换,不适用额外空...原创 2018-05-25 17:46:15 · 342 阅读 · 0 评论 -
Binary Tree Level Order Traversal II二叉树的层次遍历 II
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层次遍历为:[ [15,7], [9,20], [3]]这道题主要是记录discuss的超简洁代码解法。我的第一想法...原创 2018-05-26 00:26:20 · 94 阅读 · 0 评论 -
Balanced Binary Tree平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 ...原创 2018-05-26 10:15:36 · 156 阅读 · 0 评论 -
Minimum Depth of Binary Tree二叉树的最小深度
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最小深度 2.这道题不难,如果是单纯求二叉树深度就更简单了,这道题要求的是最小深度,所以我们只需要考虑如下两种情况即可:...原创 2018-05-26 10:38:47 · 122 阅读 · 0 评论 -
链表动静构造法
对于链表的增删改查操作是数据结构的基础,但是当我们提交代码的时候经常会遇到头结点的判断出错问题,这里以leetcode的一道题为例重点记录下构建链表的动静态初始化方法,可以包含头结点的处理,不用对头结点做单独处理。Merge Two Sorted Lists将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例:输入:1->2->4, 1-&...原创 2018-05-22 14:22:06 · 199 阅读 · 0 评论 -
Convert Sorted List to Binary Search Tree 排序链表转二叉搜索树
给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 ...原创 2018-05-22 15:38:34 · 268 阅读 · 0 评论 -
Populating Next Right Pointers in Each Node 填充同一层的兄弟节点
给定一个二叉树struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。说明:你只能使用额外常数空...原创 2018-06-02 17:04:39 · 128 阅读 · 0 评论 -
Sum Root to Leaf Numbers 求根到叶子节点数字之和
给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 25解释:从根到叶子节点路径 1->2 代表数字 12.从根...原创 2018-06-03 11:27:41 · 363 阅读 · 0 评论 -
Binary Tree Preorder Traversal 二叉树的前序遍历
给定一个二叉树,返回它的 前序 遍历。 示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]进阶: 递归算法很简单,你可以通过迭代算法完成吗?思路:这道题有递归和非递归,先讲递归算法。递归解法:在函数的参数中引入vector的引用,按照前序遍历(根-左-右),访问到当前节点就累加到vector中。最后返回vector递归...原创 2018-06-03 15:39:00 · 365 阅读 · 0 评论 -
Path Sum路径总和系列总结 leetcode
Path Sum 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 ...原创 2018-05-27 19:52:38 · 1912 阅读 · 1 评论 -
Binary Tree Right Side View 二叉树的右视图
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释: 1 <--- / \2 3 <--- \ \ 5 4 <---思路:这道题是层序遍历的变形,唯一不同的...原创 2018-06-03 22:35:15 · 179 阅读 · 0 评论 -
Lowest Common Ancestor of a Binary Search Tree 二叉搜索树的最近公共祖先 系列(简单,中等)
简单版:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为: “对于有根树T的两个结点u、v,最近公共祖先表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。”(一个节点也可以是它自己的祖先)例如,给定二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5] _______6______ / ...原创 2018-05-27 23:07:17 · 420 阅读 · 0 评论 -
Binary Tree Paths 二叉树的所有路径
给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。示例:输入: 1 / \2 3 \ 5输出: ["1->2->5", "1->3"]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3这道题很简单,用前序遍历遍历一遍树便可以得到答案,主要是学会怎么把遍历到的节点拼接成字符...原创 2018-05-28 10:40:38 · 609 阅读 · 0 评论 -
Count Complete Tree Nodes 完全二叉树的节点个数
给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。示例:输入: 1 / \ 2 3 / \ /4 5 6输出: 6思路:最简单的思路就是采用后续遍历,暴力法,逐个数,但是...原创 2018-06-04 12:12:45 · 1669 阅读 · 0 评论 -
Kth Smallest Element in a BST 二叉搜索树中第K小的元素
给定一个二叉搜索树,编写一个函数kthSmallest来查找其中第 k 个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。示例 1:输入: root = [3,1,4,null,2], k = 1输出: 1示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 3输出: 3进阶:如果二叉搜索树经常被修改(插入/删除操作)并且你...原创 2018-06-04 14:46:50 · 903 阅读 · 1 评论 -
Find Mode in Binary Search Tree 寻找二叉搜索树的众数
Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred element) in the given BST.Assume a BST is defined as follows:The left subtree of a node contains on...原创 2018-05-28 16:46:38 · 767 阅读 · 0 评论 -
Convert BST to Greater Tree 把二叉搜索树转换为累加树
给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。例如:输入: 二叉搜索树: 5 / \ 2 13输出: 转换为累加树: 18 / \ ...原创 2018-05-28 17:41:02 · 483 阅读 · 0 评论 -
排序新思路,实现时间O(n)复杂度
在常用的几大排序算法中,归并排布(O(nlogn)),冒泡排序(O(n^2)),快速排序(O(nlogn)),堆排序(O(nlogn)),最低的排序复杂度都是O(nlogn),这是由于我们假定排序的数对应的范围都是不确定的,比如我们需要对int范围的数组进行排序(-2147483648-2147483647),对于这样的排序,由于范围很大,所以常见的排序算法的复杂度都是当n极大时才有意义。现有有一...原创 2018-05-23 19:42:25 · 261 阅读 · 0 评论 -
Reorder List及细节归纳
给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5-...原创 2018-05-23 20:38:09 · 175 阅读 · 0 评论 -
Arranging Coins 排列硬币
你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币。给定一个数字 n,找出可形成完整阶梯行的总行数。n 是一个非负整数,并且在32位有符号整型的范围内。示例 1:n = 5硬币可排列成以下几行:¤¤ ¤¤ ¤因为第三行不完整,所以返回2.示例 2:n = 8硬币可排列成以下几行:¤¤ ¤¤ ¤ ¤¤ ¤因为第四行不完整,所以返回3...原创 2018-06-11 14:43:46 · 269 阅读 · 1 评论 -
House Robber 打家劫舍 系列
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 ...原创 2018-06-04 18:16:54 · 2491 阅读 · 0 评论 -
Serialize and Deserialize BST 序列化和反序列化二叉搜索树
串行化是将数据结构或对象转换为一系列位的过程,以便它可以存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后在同一个或另一个计算机环境中重建。设计一个算法来序列化和反序列化二叉搜索树。 对序列化/反序列化算法的工作方式没有限制。 您只需确保二叉搜索树可以序列化为字符串,并且可以将该字符串反序列化为原始树结构。编码的字符串应尽可能紧凑。注意:不要使用类成员/全局/静态变量来存储状态。 你的序列...原创 2018-06-04 19:07:34 · 563 阅读 · 0 评论 -
Copy List with Random Pointer复制带随机指针的链表
复制带随机指针的链表给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深度拷贝。 这里参考了博文:https://www.cnblogs.com/TenosDoIt/p/3387000.html(图画的很赞,这里借用了)https://blog.csdn.net/sun20082567/article/details/36198817(图画...原创 2018-05-24 04:06:35 · 285 阅读 · 0 评论 -
Delete Node in a BST 删除二叉搜索树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。说明: 要求算法时间复杂度为 O(h),h 为树的高度。示例:root = [5,3,6,2,4,null,7]key = 3 5 /...原创 2018-06-04 20:51:40 · 284 阅读 · 0 评论 -
Linked List Cycle II环形链表 II
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。说明:不允许修改给定的链表。进阶:你是否可以不用额外空间解决此题?思路:如下图所示:初始化slow指针指向head节点,fast指向head->next节点,假设slow与fast在c点相遇。由于slow走过的路程为x+y,fast走过的路程为x+y+z+y,且fast走过的距离是slo...原创 2018-05-24 10:24:15 · 1149 阅读 · 2 评论 -
Diameter of Binary Tree 二叉树的直径
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。注意:两结点之间的路径长度是以它们之间边的数目表...原创 2018-05-28 23:26:54 · 496 阅读 · 0 评论 -
Heaters 供暖器
冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。现在,给出位于一条水平线上的房屋和供暖器的位置,找到可以覆盖所有房屋的最小加热半径。所以,你的输入将会是房屋和供暖器的位置。你将输出供暖器的最小加热半径。说明:给出的房屋和供暖器的数目是非负数且不会超过 25000。给出的房屋和供暖器的位置均是非负数且不会超过10^9。只要房屋位于供暖器的半径内(包括在边缘上),它就可以得到供...原创 2018-06-11 19:44:47 · 411 阅读 · 0 评论 -
Find Smallest Letter Greater Than Target 寻找比目标字母大的最小字母
给定一个只包含小写字母的有序数组letters 和一个目标字母 target,寻找有序数组里面比目标字母大的最小字母。数组里字母的顺序是循环的。举个例子,如果目标字母target = 'z' 并且有序数组为 letters = ['a', 'b'],则答案返回 'a'。示例:输入:letters = ["c", "f", "j"]target = "a"输出: "c"输入:letter...原创 2018-06-11 19:57:56 · 337 阅读 · 0 评论 -
Binary Tree Tilt 二叉树的斜度
Given a binary tree, return the tilt of the whole tree.The tilt of a tree node is defined as the absolute difference between the sum of all left subtree node values and the sum of all right subtree no...原创 2018-05-29 13:48:51 · 159 阅读 · 0 评论 -
Subtree of Another Tree 另一个树的子树
给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1:给定的树 s: 3 / \ 4 5 / \ 1 2给定的树 t: 4 / \ 1 2返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。示例 ...原创 2018-05-29 17:05:10 · 165 阅读 · 0 评论 -
Search in Rotated Sorted Array 搜索旋转排序数组
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0...原创 2018-06-12 15:09:08 · 3849 阅读 · 0 评论 -
Search in Rotated Sorted Array II 搜索旋转排序数组 II
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [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], target = 0输出: true示例 2:输入: nums = [2,5,6,0,0,...原创 2018-06-12 15:37:22 · 507 阅读 · 0 评论 -
Search for a Range 搜索范围
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10], target = 6...原创 2018-06-12 16:15:00 · 225 阅读 · 0 评论 -
Merge Two Binary Trees 合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:输入: Tree 1 Tree 2 1 ...原创 2018-05-29 19:23:18 · 251 阅读 · 0 评论