算法
文章平均质量分 68
Charles.zhang
朝闻道,夕死可矣。路漫漫其修远兮,吾将上下而求索。
展开
-
斐波那契数列的5种python写法
斐波那契数列的5种python写法斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)斐波那契数列,难点在于算法,还有如果变成生成器,gene...转载 2020-05-09 17:51:53 · 13644 阅读 · 0 评论 -
lintcode练习-14.二分查找
class Solution: """ @param nums: The integer array. @param target: Target to find. @return: The first position of target. Position starts from 0. """ def binarySearch(self, nums, tar...原创 2018-05-28 17:50:49 · 233 阅读 · 0 评论 -
七种经典排序算法python实现
最近要考算法设计,所以把排序算法总结一下。经典的排序算法包括:冒泡排序,选择排序,插入排序,快速排序,归并排序,堆排序和希尔排序。全部程序都用python3实现,默认从小到大排序。参考文章:https://blog.csdn.net/ls5718/article/details/51809866,博主的文章里面有演示动图,不懂的时候可以看下动图。一、冒泡排序 BubbleSort介绍:让两数...原创 2018-06-04 18:39:46 · 795 阅读 · 0 评论 -
lintcode练习-155.二叉树的最小深度
描述给定一个二叉树,找出其最小深度。二叉树的最小深度为根节点到最近叶子节点的距离。您在真实的面试中是否遇到过这个题? 是样例给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5 这个二叉树的最小深度为 2解题思路:利用了二叉树的层次遍历的思想,在每一层的遍历中都判断一下是否有叶子结点,如果有叶...原创 2018-07-08 15:01:12 · 285 阅读 · 0 评论 -
lintcode练习-175.翻转二叉树
描述翻转一棵二叉树您在真实的面试中是否遇到过这个题? 是样例 1 1 / \ / \2 3 => 3 2 / \ 4 4挑战递归固然可行,能否写个非递归的?#递归版本:"""Definition of TreeNode:class TreeNode: def __init__(self, val)...原创 2018-07-08 15:40:16 · 218 阅读 · 0 评论 -
lintcode练习-177.把排序数组转换为高度最小的二叉搜索树
描述给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。There may exist multiple valid solutions, return any of them.您在真实的面试中是否遇到过这个题? 是样例给出数组 [1,2,3,4,5,6,7], 返回 4 / \ 2 6 / \ / \1 3 5 7挑战可能有多个答...原创 2018-07-08 16:15:25 · 198 阅读 · 0 评论 -
lintcode练习-69. 二叉树的层次遍历
描述给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)您在真实的面试中是否遇到过这个题? 是样例给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7返回他的分层遍历结果:[ [3], [9,20], [15,7]]挑战挑战1:只使用一个队列去实现它挑战2:用DFS算法来做实现代码:# Definition of ...原创 2018-07-08 16:18:32 · 232 阅读 · 0 评论 -
lintcode练习-70. 二叉树的层次遍历 II
描述给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历)您在真实的面试中是否遇到过这个题? 是样例给出一棵二叉树 {3,9,20,#,#,15,7}, 3 / \ 9 20 / \ 15 7按照从下往上的层次遍历为:[ [15,7], [9,20], [3]]实现代码:思路:网上大部分的...原创 2018-07-08 16:24:41 · 199 阅读 · 0 评论 -
lintcode练习-71. 二叉树的锯齿形层次遍历
描述给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行) 您在真实的面试中是否遇到过这个题? 是样例给出一棵二叉树 {3,9,20,#,#,15,7}, 3 / \ 9 20 / \ 15 7返回其锯齿形的层次遍历为:[ [3], [20,9], [15,7]]实现代码:思路:从题目描述也可以清楚的看...原创 2018-07-08 16:27:20 · 236 阅读 · 0 评论 -
lintcode练习-72. 中序遍历和后序遍历树构造二叉树
描述根据中序遍历和后序遍历树构造二叉树你可以假设树中不存在相同数值的节点您在真实的面试中是否遇到过这个题? 是样例给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2]返回如下的树: 2 / \1 3实现代码:思路:代码:"""Definition of TreeNode:class TreeNode: def __init__(self, val): s...原创 2018-07-08 16:32:11 · 234 阅读 · 0 评论 -
lintcode练习-73. 前序遍历和中序遍历树构造二叉树
根据前序遍历和中序遍历树构造二叉树.样例给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树: 2 / \1 3"""Definition of TreeNode:class TreeNode: def __init__(self, val): self.val = val self.left, self.right = None, N...原创 2018-07-08 16:33:25 · 241 阅读 · 0 评论 -
lintcode练习-97. 二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离。样例给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5这个二叉树的最大深度为3."""Definition of TreeNode:class TreeNode: def __init__(self, val): self.val = val self.le...原创 2018-07-08 16:35:08 · 192 阅读 · 0 评论 -
lintcode练习-201.线段树的构造
线段树是一棵二叉树,他的每个节点包含了两个额外的属性start和end用于表示该节点所代表的区间。start和end都是整数,并按照如下的方式赋值:根节点的 start 和 end 由 build 方法所给出。对于节点 A 的左儿子,有 start=A.left, end=(A.left + A.right) / 2。对于节点 A 的右儿子,有 start=(A.left + A.right) /...原创 2018-07-09 18:42:20 · 226 阅读 · 0 评论 -
lintcode练习-202. 线段树的查询
描述对于一个有n个数的整数数组,在对应的线段树中, 根节点所代表的区间为0-n-1, 每个节点有一个额外的属性max,值为该节点所代表的数组区间start到end内的最大值。为SegmentTree设计一个 query 的方法,接受3个参数root, start和end,线段树root所代表的数组中子区间[start, end]内的最大值。在做此题之前,请先完成 线段树构造 这道题目。您在真实的面...原创 2018-07-09 18:59:39 · 200 阅读 · 0 评论 -
lintcode练习-203. 线段树的修改
描述对于一棵 最大线段树, 每个节点包含一个额外的 max 属性,用于存储该节点所代表区间的最大值。设计一个 modify 的方法,接受三个参数 root、 index 和 value。该方法将 root 为根的线段树中 [start, end] = [index, index] 的节点修改为了新的 value ,并确保在修改后,线段树的每个节点的 max 属性仍然具有正确的值。在做此...原创 2018-07-09 19:11:38 · 211 阅读 · 0 评论 -
字符串匹配的KMP算法
字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完...原创 2018-07-03 15:35:09 · 189 阅读 · 0 评论 -
顺序表和链表的区别及其优缺点
1.顺序表存储(典型的数组) 原理:顺序表存储是将数据元素放到一块连续的内存存储空间,相邻数据元素的存放地址也相邻(逻辑与物理统一)。 优点:(1)空间利用率高。(局部性原理,连续存放,命中率高) (2)存取速度高效,通过下标来直接存储。 缺点:(1)插入和删除比较慢,比如:插入或者删除一个元素时,整个表需要遍历移动元素来重新排一次顺序。 ...转载 2018-07-03 21:06:01 · 15034 阅读 · 0 评论 -
二叉树与树的理解
1. 树形结构 vs 线性结构树形结构是复杂数据结构中最为简单的一类结构;树形结构不但本身很有用,还反映了许多计算过程的抽象结构;树形结构的结点形成一种层次结构;树和链表、队列、栈等结构一样,也是一些基本元素的汇集,单元素之间不是简单的线性关系(在一个包含 n 个元素的数据结构里),可能存在更为复杂的联系。这种情况下,在一个包含 n个元素的数据结构里,元素之间的最远距离就不是 n,可能小得多。树形...原创 2018-07-05 16:15:23 · 1192 阅读 · 0 评论 -
lintcode练习-12. 带最小值操作的栈
描述实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成。如果堆栈中没有数字则不能进行min方法的调用您在真实的面试中是否遇到过这个题? 是样例如下操作:push(1),pop(),push(2),push(3),min(), push(1),min() 返回 1,2,1实现代码:思路:定义两...原创 2018-07-12 18:28:17 · 237 阅读 · 0 评论 -
lintcode练习-40. 用栈实现队列
描述正如标题所述,你需要使用两个栈来实现队列的一些操作。队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。pop和top方法都应该返回第一个元素的值。您在真实的面试中是否遇到过这个题? 是样例比如push(1), pop(), push(2), push(3), top(), pop(),你应该返回1,2和2挑战仅使用两个栈来实现它...原创 2018-07-12 23:31:15 · 312 阅读 · 0 评论 -
lintcode练习-66.67.68.二叉树的三种递归遍历和非递归遍历
二叉树的先序, 中序, 后序遍历 都是属于深度优先遍历。 直接上代码:先序遍历: class TreeNode: def __init__(self, val): self.val = val self.left, self.right = None, Noneclass Solution: """...原创 2018-07-06 16:48:06 · 201 阅读 · 0 评论 -
lintcode练习-229. 栈排序
描述请设计一种方法将一个栈进行升序排列 (最大的数在最上面)。你可以使用另外一个栈来辅助操作,但不可将这些数复制到另外一个数据结构中 (如,数组)。O(n^2) time is acceptable.您在真实的面试中是否遇到过这个题? 是样例给一个栈:| ||3||1||2||4| -排序之后:| ||4||3||2||1| -...原创 2018-07-24 21:15:50 · 478 阅读 · 0 评论 -
lintcode练习-224. 用一个数组实现三个栈
描述用一个数组实现三个栈。你可以假设这三个栈都一样大并且足够大。你不需要担心如果一个栈满了之后怎么办。您在真实的面试中是否遇到过这个题? 是样例ThreeStacks(5) // create 3 stacks with size 5 in single array. stack index from 0 to 2push(0, 10) // push 10 in the ...原创 2018-07-24 23:13:51 · 768 阅读 · 0 评论 -
lintcode练习-104. Merge K Sorted Lists
描述合并k个排序链表,并且返回合并后的排序链表。尝试分析和描述其复杂度。您在真实的面试中是否遇到过这个题? 是样例给出3个排序链表[2->4->null,null,-1->null],返回 -1->2->4->null解题思路:顾名思义,这个最好的解法是使用归并排序,还有一种方法是堆排序。mergesort:#归并排序的思想...原创 2018-07-24 23:19:31 · 201 阅读 · 0 评论 -
lintcode练习-127. 拓扑排序
描述给定一个有向图,图节点的拓扑排序被定义为: 对于每条有向边A--> B,则A必须排在B之前 拓扑排序的第一个节点可以是任何在图中没有其他节点指向它的节点 找到给定图的任一拓扑排序 你可以假设图中至少存在一种拓扑排序您在真实的面试中是否遇到过这个题? 是说明Learn more about representation of graphs...原创 2018-07-25 11:42:17 · 392 阅读 · 0 评论 -
AOV/AOE网及其算法
用图中的顶点表示某个有一定规模的“工程”里的不同活动,用图中的边表示各项活动之间的先后顺序关系。这样的有向图成为活动顶点网(active on vertex network)AOV网。对于给定的AOV网N, 如果N中的所有顶点能排成一个线性序列 S = v0,v1,v2,v3...vn,满足:如果N中存在从顶点Vi到顶点Vj的路径,那么S里Vi就排在Vj之前,则S称为N的一个拓扑序列,而构造拓...原创 2018-07-25 15:10:29 · 3068 阅读 · 1 评论 -
lintcode练习-226. 栈集II
描述假如你有一堆的盘子。如果你堆得太高的话,就可能会垮掉。所以,在真实的生活中,如果盘子叠到一定高度,你会重新开始堆新的一堆盘子。实现这样的一个数据结构,我们称之为栈集,来模拟这个过程。这个栈集包含若干个栈(可以理解为若干堆的盘子),如果一个栈满了,就需要新建一个栈来装新加入的项。你需要实现栈集的两个方法,push(item) 和 pop(),让这个栈集对外表现得就像是一个栈在进行操作一样...原创 2018-07-28 21:07:03 · 1096 阅读 · 0 评论 -
lintcode练习-490. 栈集
描述假如你有一堆的盘子。如果你堆得太高的话,就可能会垮掉。所以,在真实的生活中,如果盘子叠到一定高度,你会重新开始堆新的一堆盘子。实现这样的一个数据结构,我们称之为栈集,来模拟这个过程。这个栈集包含若干个栈(可以理解为若干堆的盘子),如果一个栈满了,就需要新建一个栈来装新加入的项。你需要实现栈集的两个方法,push(item) 和 pop(),让这个栈集对外表现得就像是一个栈在进行操作一样...原创 2018-07-28 21:07:42 · 208 阅读 · 0 评论 -
lintcode练习- 494. 双队列实现栈
描述利用两个队列来实现一个栈的功能您在真实的面试中是否遇到过这个题? 是样例push(1)pop()push(2)isEmpty() // return falsetop() // return 2pop()isEmpty() // return true 实现代码:利用list来模拟队列,在执行pop操作时,将que1里的值全部存放在que2中,删除最...原创 2018-07-28 21:29:50 · 273 阅读 · 0 评论 -
lintcode练习-128. 哈希函数
描述在数据结构中,哈希函数是用来将一个字符串(或任何其他类型)转化为小于哈希表大小且大于等于零的整数。一个好的哈希函数可以尽可能少地产生冲突。一种广泛使用的哈希函数算法是使用数值33,假设任何字符串都是基于33的一个大整数,比如:hashcode("abcd") = (ascii(a) * 333 + ascii(b) * 332 + ascii(c) *33 + ascii(d)) % ...原创 2018-07-26 11:33:52 · 280 阅读 · 0 评论 -
lintcode练习-56. 两数之和
描述给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 0 到 n-1。你可以假设只有一组答案。您在真实的面试中是否遇到过这个题? 是样例给出 numbers = [2, 7, 11, 15], target = 9, 返回 [0, 1].挑战...原创 2018-07-26 13:34:33 · 186 阅读 · 0 评论 -
lintcode练习- 487. 姓名去重
描述给一串名字,将他们去重之后返回。两个名字重复是说在忽略大小写的情况下是一样的。您在真实的面试中是否遇到过这个题? 是说明你可以假设名字只包含大小写字母和空格。样例给出:[ "James", "james", "Bill Gates", "bill Gates", "Hello World", "HELLO WORLD", &q原创 2018-07-26 19:45:17 · 355 阅读 · 0 评论 -
lintcode练习-488. 快乐数
描述写一个算法来判断一个数是不是"快乐数"。一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。如果可以变为1,那么这个数就是快乐数。您在真实的面试中是否遇到过这个题? 是样例19 就是一个快乐数。 1^2 + 9^2 = 828^2 + 2^2 = 686^2...原创 2018-07-26 20:46:28 · 247 阅读 · 0 评论 -
lintcode练习-521. 去除重复元素
描述给一个整数数组,去除重复的元素。你应该做这些事1.在原数组上操作2.将去除重复之后的元素放在数组的开头3.返回去除重复元素之后的元素个数不需要保持原数组的顺序您在真实的面试中是否遇到过这个题? 是样例给出 nums = [1,3,1,4,4,2],你需要做以下操作1.将重复元素扔在最后面 => nums = [1,3,4,2,?,?].2.返回个数 4...原创 2018-07-26 21:20:02 · 1252 阅读 · 0 评论 -
lintcode练习-547. 两数组的交
描述返回两个数组的交Each element in the result must be unique. The result can be in any order.您在真实的面试中是否遇到过这个题? 是样例nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2].挑战可以用三种不同的方法实现吗?实现方法:一:class...原创 2018-07-26 23:23:04 · 233 阅读 · 0 评论 -
lintcode练习- 464. 整数排序 II
描述给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。您在真实的面试中是否遇到过这个题? 是样例给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, 2, 3, 4, 5]。实现代码:class Solution: """ @param A: an integer array @ret...原创 2018-08-03 16:42:41 · 224 阅读 · 0 评论 -
lintcode练习-548. 两数组的交 II
描述计算两个数组的交每个元素出现次数得和在数组里一样答案可以以任意顺序给出您在真实的面试中是否遇到过这个题? 是样例nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].挑战What if the given array is already sorted? How would you optimize your algor...原创 2018-07-27 09:51:28 · 191 阅读 · 0 评论 -
lintcode练习-557. 字符计数
描述对一个字符串中的字符进行计数, 返回一个hashmap, key为字符, value是这个字符出现的次数.您在真实的面试中是否遇到过这个题? 是样例给出 str = "abca", 返回{ "a": 2, "b": 1, "c": 1} 实现代码:利用好字典的get方法,很容易实现class Solution: """ @p.原创 2018-07-27 09:57:12 · 218 阅读 · 0 评论 -
lintcode练习-607. Two Sum III - Data structure design
描述设计b并实现一个 TwoSum 类。他需要支持以下操作:add 和 find。add -把这个数添加到内部的数据结构。find -是否存在任意一对数字之和等于这个值您在真实的面试中是否遇到过这个题? 是样例 add(1);add(3);add(5);find(4)//返回truefind(7)//返回false 实现代码:两个思路,因为在意位置信息,所以...原创 2018-07-27 10:19:15 · 325 阅读 · 0 评论 -
lintcode练习-627. 最长回文串
描述给出一个包含大小写字母的字符串。求出由这些字母构成的最长的回文串的长度是多少。数据是大小写敏感的,也就是说,"Aa" 并不会被认为是一个回文串。假设字符串的长度不会超过 1010。您在真实的面试中是否遇到过这个题? 是样例给出 s = "abccccdd" 返回 7一种可以构建出来的最长回文串方案是 "dccaccd"。实现代码:三种思路,每次看别人的代码...原创 2018-07-27 11:00:47 · 256 阅读 · 0 评论