Leetcode
hello_dlut
这个作者很懒,什么都没留下…
展开
-
263.ugly-number
编写程序判断给定的数是否为丑数。丑数就是只包含质因子 2, 3, 5 的正整数。例如, 6, 8 是丑数,而 14 不是,因为它包含了另外一个质因子 7。注意:1 也可以被当做丑数。输入不会超过32位整数的范围。解题思路: 将这个数一直除以2、3、5这三个数最后剩下1就说明这个数是丑数解题代码: if num<=0: return False ...原创 2018-03-28 20:09:24 · 106 阅读 · 0 评论 -
108.convert-sorted-array-to-binary-search-tree
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。此题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。 示例:给定有序数组: [-10,-3,0,5,9],一种可行答案是:[0,-3,9,-10,null,5],它可以表示成下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5解题思...原创 2018-03-27 19:41:06 · 72 阅读 · 0 评论 -
104.maximum-depth-of-binary-tree
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶节点的最长路径上的节点数。案例:给出二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回最大深度为 3 。解题思路: 函数迭代左右两边的分支即可解题代码: if not root: return 0 ...原创 2018-03-27 15:22:03 · 73 阅读 · 0 评论 -
101.symmetric-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 说明:如果你可以递归地和迭代地解决它就奖励你...原创 2018-03-27 15:17:06 · 76 阅读 · 0 评论 -
100.same-tree
给定两个二叉树,写一个函数来检查它们是否相同。如果两棵树在结构上相同并且节点具有相同的值,则认为它们是相同的。 示例 1:输入 : 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入 : 1 1 ...原创 2018-03-27 14:40:09 · 118 阅读 · 0 评论 -
069.sqrtx
实现 int sqrt(int x) 函数。计算并返回 x 的平方根。x 保证是一个非负整数。 案例 1:输入: 4输出: 2案例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于我们想返回一个整数,小数部分将被舍去。解题思路: 通过使用二分法来解决,此问题解题代码: left=0 right=x whil...原创 2018-03-27 14:08:51 · 145 阅读 · 0 评论 -
007.reverse-integer
给定一个范围为 32 位 int 的整数,将其颠倒。例 1:输入: 123输出: 321 例 2:输入: -123输出: -321 例 3:输入: 120输出: 21解题思路: 先要判断该数字是否大于0,通过一个变量来保存该数字的符号位,然后提取该数字的最后一位,变成ans的第一位,直到遍历此数字的所有位。解题代码: sign = x<0 and -1 or ...原创 2018-03-27 13:41:01 · 65 阅读 · 0 评论 -
136.single-number
给定一个整数数组,除了某个元素外其余元素均出现两次。请找出这个只出现一次的元素。 备注:你的算法应该是一个线性时间复杂度。 你可以不用额外空间来实现它吗?解题思路: 将所有的数进行异或运算最后得出的结果就是多出来的那个数。解题代码: for i in range(1,len(nums)): nums[0] ^= nums[i] r...原创 2018-03-26 18:30:54 · 117 阅读 · 0 评论 -
561.array-partition-i
给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大。示例 1:输入: [1,4,3,2]输出: 4解释: n 等于 2, 最大总和为 4 = min(1, 2) + min(3, 4).提示:n 是正整数,范围在 [1, 10000].数组中的元素范...原创 2018-03-26 18:17:29 · 94 阅读 · 0 评论 -
566.reshape-the-matrix
在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。示例 1:输入: nums = [...原创 2018-03-26 17:54:36 · 247 阅读 · 0 评论 -
110.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-03-27 20:04:04 · 128 阅读 · 0 评论 -
111.minimum-depth-of-binary-tree
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶节点的最短路径的节点数量。解题思路: 还是用万能的递归方法。。。解题代码: if not root: return 0 left=self.minDepth(root.left) right=self.minDepth(root.right) if no...原创 2018-03-27 20:24:44 · 77 阅读 · 0 评论 -
112.path-sum
给定一棵二叉树和一个总和,确定该树中是否存在根到叶的路径,这条路径的所有值相加等于给定的总和。例如:给定下面的二叉树和 总和 = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1...原创 2018-03-27 20:46:32 · 115 阅读 · 0 评论 -
290.word-pattern
给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循这种模式。这里的 遵循 指完全匹配,例如在pattern里的每个字母和字符串 str 中的每个非空单词存在双向单映射关系。例如:pattern = "abba", str = "dog cat cat dog", 返回true pattern = "abba", str = "dog cat cat fish", 返回...原创 2018-03-28 20:03:24 · 165 阅读 · 0 评论 -
205.isomorphic-strings
给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以被替换最终变成 t ,则两个字符串是同构的。所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。例如,给定 "egg", "add", 返回 true.给定 "foo", "bar", 返回 false.给定 "paper", "title", 返回 tru原创 2018-03-28 19:47:24 · 147 阅读 · 0 评论 -
350.intersection-of-two-arrays-ii
给定两个数组,写一个方法来计算它们的交集。例如:给定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].注意: 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。 我们可以不考虑输出结果的顺序。跟进:如果给定的数组已经排好序呢?你将如何优化你的算法?如果 nums1 的大小比 nums2 小很多,哪种方法更优?如果nums2的元...原创 2018-03-28 19:34:29 · 126 阅读 · 0 评论 -
349.intersection-of-two-arrays
给定两个数组,写一个函数来计算它们的交集。例子: 给定 num1= [1, 2, 2, 1], nums2 = [2, 2], 返回 [2].提示:每个在结果中的元素必定是唯一的。我们可以不考虑输出结果的顺序。解题思路: 遍历第一个数组,并存到一个集合中去,然后再遍历第二个数组,如果第二个数组中存在集合中的元素,则将其放入ans中,并删除集合中的这个元素。解题代码: d...原创 2018-03-28 19:14:40 · 153 阅读 · 0 评论 -
389.find-the-difference
给定两个字符串 s 和 t,它们只包含小写字母。字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。请找出在 t 中被添加的字母。 示例:输入:s = "abcd"t = "abcde"输出:e解释:'e' 是那个被添加的字母。解题思路: 把所有的字母通过ord进行转码,然后相加得到两个和(map),然后一减就可以得到被添加的那个字母,再通过chr转码。 解题代...原创 2018-03-28 13:49:04 · 151 阅读 · 0 评论 -
575. Distribute Candies
Given an integer array with even length, where different numbers in this array represent different kinds of candies. Each number means one candy of the corresponding kind. You need to distribute these...原创 2018-03-28 13:39:10 · 87 阅读 · 0 评论 -
594.longest-harmonious-subsequence
和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度。示例 1:输入: [1,3,2,2,5,2,3,7]输出: 5原因: 最长的和谐数组是:[3,2,2,2,3].说明: 输入的数组长度最大不超过20,000.解题思路: 使用counter来计数。解题代码: ans=0 ...原创 2018-03-28 13:32:50 · 843 阅读 · 0 评论 -
599.minimum-index-sum-of-two-lists
假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设总是存在一个答案。示例 1:输入:["Shogun", "Tapioca Express", "Burger King", "KFC"]["Piatti", "The .原创 2018-03-28 13:04:46 · 278 阅读 · 0 评论 -
645.set-mismatch
The set S originally contains numbers from 1 to n. But unfortunately, due to the data error, one of the numbers in the set got duplicated to another number in the set, which results in repetition of o...原创 2018-03-28 12:33:49 · 139 阅读 · 0 评论 -
605. Can Place Flowers
Suppose you have a long flowerbed in which some of the plots are planted and some are not. However, flowers cannot be planted in adjacent plots - they would compete for water and both would die.Given ...原创 2018-03-26 10:16:02 · 64 阅读 · 0 评论 -
643.maximum-average-subarray-i
给定 n 个整数,找出平均数最大且长度为 k 的子数组,并输出该最大平均数。例:输入: [1,12,-5,-6,50,3], k = 4输出: 12.75解释: 最大平均数 (12-5-6+50)/4 = 51/4 = 12.75 注意:1 <= k <= n <= 30,000。所给数据范围 [-10,000,10,000]。解题思路: 定义一个队列,长度只能为k,...原创 2018-03-26 09:52:15 · 70 阅读 · 0 评论 -
461.hamming-distance
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y < 231.示例:输入: x = 1, y = 4输出: 2解释:1 (0 0 0 1)4 (0 1 0 0) ↑ ↑上面的箭头指出了对应二进制位不同的位置。解题思路: 先将两个整数异或,然后得到一个新的...原创 2018-03-16 10:21:50 · 91 阅读 · 0 评论 -
50.Pow(x, n)
实现 pow(x, n)。题目分析: 题目的要求是实现x^n 要考虑n是负数的情况,我们先把n变成偶数比较方便,n&1 可以用来判断n是否为奇数,,然后两个x自乘赋值给自己,把n不断的 除以2(n>>=),直到n很接近0为止解题代码: if n <0: n = -n x= 1/x ...原创 2018-03-15 19:47:09 · 85 阅读 · 0 评论 -
012.integer-to-roman
给定一个整数,将其转为罗马数字。输入保证在 1 到 3999 之间。解题思路:解决这道题主要要知道,罗马数字的表示方法罗马数字共有7个,即I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000)。1、重复数次:一个罗马数字重复几次,就表示这个数的几倍。2、右加左减:2.1 在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字。2.2 在较大的罗马数字的左边记上...原创 2018-03-15 17:54:12 · 101 阅读 · 0 评论 -
120.Triangle 三角形
给出一个三角形(数据数组),找出从上往下的最小路径和。每一步只能移动到下一行中的相邻结点上。比如,给你如下三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]则从上至下最小路径和为 11(即,2 + 3 + 5 + 1 = 11)注意:加分项:如果你可以只使用 O(n) 的额外空间(n是三角形的行数)解题思路: 采用动态规划的方法,创建...原创 2018-03-15 16:49:28 · 175 阅读 · 0 评论 -
75.Sort Colors 颜色排序
给定一个包含红色、白色和蓝色,且含有 n 个元素的数组,对它们进行排序,使得相同颜色的元素相邻,颜色顺序为红色、白色、蓝色。此题中,我们使用整数 0, 1 和 2 分别表示红色,白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。点击显示进阶问题.进阶:一个相当直观的解决方案是使用计数排序的 two-pass 算法。首先,迭代计算出0,1 和 2 元素的个数,然后重写当前数组。你能想出一个仅...原创 2018-03-15 16:08:59 · 152 阅读 · 0 评论 -
073.set-matrix-zeroes (待解)
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将这个元素所在的行和列都置零。点击查看问题跟进。你有没有使用额外的空间?使用 O(mn) 的空间不是一个好的解决方案。使用 O(m + n) 的空间有所改善,但仍不是最好的解决方案。你能设计一个使用恒定空间的解决方案吗?解题思路: 先将矩阵的第一行和第一列赋0,表示这一行和一列最后都要赋0...原创 2018-03-15 15:40:22 · 76 阅读 · 0 评论 -
011.container-with-most-water
给定 n 个正整数 a1,a2,...,an,其中每个点的坐标用(i, ai)表示。 画 n 条直线,使得线 i 的两个端点处于(i,ai)和(i,0)处。请找出其中的两条直线,使得他们与 X 轴形成的容器能够装最多的水。 注意:你不能倾斜容器,n 至少是2。解题思路: 这道题其实和42雨水题差不多,这道题也是从两边向中间遍历,找到最大的那个容器即可解题代码: ans=left...原创 2018-03-15 14:15:19 · 133 阅读 · 0 评论 -
042.trapping-rain-water
给 n 个非负整数表示每个宽度为一的柱子的高度图,计算下雨之后能接多少水。例如,输入 [0,1,0,2,1,0,1,3,2,1,2,1],返回 6。上面的高度图由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示,在这种情况下,可以接 6 个单位的雨水(蓝色部分)。 解题思路: 这道题目设计的非常巧妙,主要需要解决的问题是如何让左右两根很高的柱子中间填满,可以从左右同时网中间遍历...原创 2018-03-15 14:05:11 · 142 阅读 · 0 评论 -
041.First Missing Positive
给一个未排序的数组,找出第一个缺失的正整数。例如,[1,2,0] 返回 3,[3,4,-1,1] 返回 2。你的算法应该在 O(n) 的时间复杂度内完成并且使用常数量的空间。解题思路: 这道题感觉比之前的题目都要难许多,因为限定了算法的时间复杂度所以并不能通过普通排序来完成,但我们可以通过桶排序来实现,意思是这个数组要实现第i个元素等于i+1,然后遍历整个数组,从小到大把每一个位置填满,最后...原创 2018-03-15 13:30:38 · 75 阅读 · 0 评论 -
27.Remove Element
给定一个数组和一个值,在这个数组中原地移除指定值和返回移除后新的数组长度。不要为其他数组分配额外空间,你必须使用 O(1) 的额外内存原地修改这个输入数组。元素的顺序可以改变。超过返回的新的数组长度以外的数据无论是什么都没关系。示例:给定 nums = [3,2,2,3],val = 3,你的函数应该返回 长度 = 2,数组的前两个元素是 2解体思路: 创造一个变量res来从nums[0...原创 2018-03-14 10:04:45 · 83 阅读 · 0 评论 -
35.Search Insert Position
给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。你可以假设在数组中无重复元素。 案例 1:输入: [1,3,5,6], 5输出: 2 案例 2:输入: [1,3,5,6], 2输出: 1 案例 3:输入: [1,3,5,6], 7输出: 4 案例 4:输入: [1,3,5,6], 0输出: 0解题思路: 只需要遍历一遍...原创 2018-03-14 10:28:19 · 60 阅读 · 0 评论 -
53.Maximum Subarray 最大子数组
给定一个序列(至少含有 1 个数),从该序列中寻找一个连续的子序列,使得子序列的和最大。例如,给定序列 [-2,1,-3,4,-1,2,1,-5,4],连续子序列 [4,-1,2,1] 的和最大,为 6。 扩展练习:若你已实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。解题思路: 创建一个presum的变量,该变量的主要作用是比较前i个的和,和nums[i]的大小,来找到当前的...原创 2018-03-14 10:54:01 · 82 阅读 · 0 评论 -
448.find-all-numbers-disappeared-in-an-array
Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.Find all the elements of [1, n] inclusive that do not appear in this array.Could yo...原创 2018-03-25 23:24:35 · 72 阅读 · 0 评论 -
217.contains-duplicate
给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数应该返回 true。如果每个元素都不相同,则返回 false。解题思路: 先把数组排序,遍历一遍数组如果存在前后两个相等的元素则返回true,否则返回false。解题代码: nums.sort() for i in range(0,len(nums)-1): if...原创 2018-03-25 21:55:43 · 110 阅读 · 0 评论 -
89.rotate-array
将包含 n 个元素的数组向右旋转 k 步。例如,如果 n = 7 , k = 3,给定数组 [1,2,3,4,5,6,7] ,向右旋转后的结果为 [5,6,7,1,2,3,4]。注意:尽可能找到更多的解决方案,这里最少有三种不同的方法解决这个问题。[显示提示]提示:要求空间复杂度为 O(1)解题思路: 先把前n-k个数对调顺序,再把后k个数对调顺序,然后把整个数组对调顺序,是不是很神奇!解...原创 2018-03-25 21:47:25 · 62 阅读 · 0 评论 -
167.two-sum-ii-input-array-is-sorted
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。请注意,返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入都只有一个解决方案,而且你不会重复使用相同的元素。输入:数组 = {2, 7, 11, 15}, 目标数 = 9输出:index1 = ...原创 2018-03-14 15:56:06 · 134 阅读 · 0 评论