数据结构与算法
Infi_zc
MLSys
展开
-
二叉树的前中后序遍历非递归写法
前言数据结构学过好久了,刷leetcode做到二叉树的题,干脆系统的复习一下二叉树的相关知识。二叉树的遍历是基本操作,其中非递归写法稍微难一些。其相对递归地有点是效率高,空间时间均更高效,特别是二叉树比较深的情况下。前序遍历前序遍历就是从栈里取出节点,然后右子节点入栈,左子节点入栈,结束的条件是栈中没有节点。中序遍历算法中对每一个节点先一直左子树的子树这样进栈,结束后取出当前节点,右子树...原创 2019-01-21 10:21:24 · 245 阅读 · 0 评论 -
LeetCode 338. Countin Bits
题目给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例 2:输入: 5输出: [0,1,1,2,1,2]进阶:给出时间复杂度为O(n*sizeof(integer))的解答非常容易。但你可以在线性时间O(n)内用一趟扫描做到吗?要求算法的空间复杂度...原创 2019-03-01 15:48:43 · 89 阅读 · 0 评论 -
LeetCode 20. Valid Parentheses
题目给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 ‘’左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]"输出: false示例 ...原创 2019-02-25 20:41:27 · 88 阅读 · 0 评论 -
LeetCode 141 Linked List Cycle
题目给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:tr...原创 2019-02-25 23:09:59 · 95 阅读 · 0 评论 -
LeetCode 234. Palindrome Linked List
题目请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?思路我想到了要将链表逆序,然后再比较前一半和后一半,但我没想到怎么找到中点,有点没转过来脑筋。所以就用了比较笨的方法,空间复杂度高,时间还好。先求出...原创 2019-02-26 17:06:35 · 121 阅读 · 0 评论 -
LeetCode 406.Queue Reconstruction by Height
题目假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。示例输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]] 输出:[[5,0], [7,0], [5,2], [6,1], [4,4], ...原创 2019-03-02 19:35:35 · 113 阅读 · 0 评论 -
LeetCode 78.子集
题目给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]思路这道题可以用回溯法,就是说如果碰到不满足条件的就返回上一级寻找下一个可用答案,下面贴上...原创 2019-03-19 19:41:00 · 87 阅读 · 0 评论 -
LeetCode 94. Binary Tree Inorder Traversal
题目给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?思想思想很容易,先一直进左子树,进到头之后取出中电,然后访问中点的右节点,之后循环。代码# Definition for a binary tree node.# cl...原创 2019-03-11 21:02:19 · 77 阅读 · 0 评论 -
LeetCode 238. Product of Array Except Self
题目给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。进阶:你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,...原创 2019-03-12 00:26:31 · 89 阅读 · 0 评论 -
LeetCode 347. 前K个高频元素
题目给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]说明:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大...原创 2019-03-18 13:56:28 · 152 阅读 · 0 评论 -
LeetCode 22.括号生成
题目给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]思路这道题我用递归来做,直觉上是设置两个flag,分别叫做needright和remainleft,因为括号有左右必须成对的语法,所以...原创 2019-03-18 17:06:19 · 118 阅读 · 0 评论 -
LeetCode 438. Find All Anagrams in a String
题目给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。说明:字母异位词指字母相同,但排列不同的字符串。不考虑答案输出的顺序。示例1:输入:s: "cbaebabacd" p: "abc"输出:[0, 6]解释:起始索引等于 0 的...原创 2019-02-25 09:42:50 · 218 阅读 · 0 评论 -
LeetCode 581. Shortest Unsorted Continuous Subarray
题目给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例 1:输入: [2, 6, 4, 8, 10, 9, 15]输出: 5解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。说明 :输入的数组长度范围在 [1, 10,000]。输入...原创 2019-02-28 21:54:08 · 197 阅读 · 0 评论 -
LeetCode 121. Best Time to Buy and Sell Stock
题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 ...原创 2019-01-26 19:56:35 · 136 阅读 · 0 评论 -
LeetCode 21. Merge Two Sorted Lists
题目将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路:开辟一个新的链表,在原来两个链表上设置下标,将下标两个值进行比较,哪个小就把哪个链在新的链上,然后下标走一位,再进行比较。最后结果肯定是一个走完了一...原创 2019-01-26 20:02:27 · 207 阅读 · 0 评论 -
LeetCode 70. Climbing Stairs
题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + ...原创 2019-01-26 20:17:55 · 103 阅读 · 0 评论 -
LeetCode 543. Diameter of Binary Tree
题目给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。示例给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。注意:两结点之间的路径长度是以它们之...原创 2019-01-22 16:40:42 · 96 阅读 · 0 评论 -
LeetCode 53. Maximun Subarray
题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。思路这道题用动态规划来解,LeetCode上最高赞的代码如下:...原创 2019-01-29 15:35:22 · 122 阅读 · 0 评论 -
LeetCode 572. 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 的一个子树拥有相同的结...原创 2019-02-22 09:54:28 · 112 阅读 · 0 评论 -
LeetCode 101. Symetric Tree
题目给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3思路判断是否镜面对称,以根节点为例就是判断左子树的...原创 2019-02-16 19:56:59 · 93 阅读 · 0 评论 -
哈希表
哈希表哈希表解决的是一个查找的问题,几乎可以在O(1)的时间内进行查找,这是一个典型的以空间换时间的做法。对输入进行哈希函数运算得到一个值,再将这个输入填入该值作为下标对应的slot里。下面就是一个将item映射为hash value,再填入hash table的例子,里面有一个负载因子的概念。问题就来了,会存在冲突,冲突就是指两个item算出来的hash value一样,但只有一个slo...原创 2019-02-22 16:28:06 · 138 阅读 · 0 评论 -
LeetCode 1. Two Sum
题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]思路暴力求...原创 2019-02-22 23:13:36 · 77 阅读 · 0 评论 -
LeetCode 160. Intersection of Two Linked Lists
题目编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 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 (注...原创 2019-02-28 12:34:46 · 93 阅读 · 0 评论 -
LeetCode 198. House Robber
题目你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 ...原创 2019-02-24 16:18:43 · 126 阅读 · 0 评论 -
LeetCode 494 目标和 Target Sum
题目You are given a list of non-negative integers, a1, a2, …, an, and a target, S. Now you have 2 symbols + and -. For each integer, you should choose one from + and - as its new symbol.Find out how m...原创 2019-07-10 14:02:39 · 99 阅读 · 0 评论