Python程序员面试算法宝典
天地一扁舟
这个作者很懒,什么都没留下…
展开
-
Python程序员面试算法宝典---解题总结: 第1章 链表 1.2 如何从无序链表中移除重复项
#!/usr/bin/env python# encoding: utf-8'''Python程序员面试算法宝典---解题总结: 第1章 链表 1.2 如何从无序链表中移除重复项题目:给定一个没有排序的链表,去掉其重复项,并保留原顺序,例如链表 1->3->1->5->5->7,去掉重复项后变为1->3->5->7分析:最简...原创 2019-04-16 08:58:14 · 426 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第1章 链表 1.3 如何计算两个单链表所代表的数之和
#!/usr/bin/env python# encoding: utf-8'''Python程序员面试算法宝典---解题总结: 第1章 链表 1.3 如何计算两个单链表所代表的数之和题目:给定两个单链表,链表的每个节点代表一位数,计算两个数的和。例如:输入链表(3->1->5)和链表(5->9->2),输出:8->0->8,即513+295...原创 2019-04-17 08:48:23 · 380 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第1章 链表 1.1 如何实现链表的逆序
#!/usr/bin/env python# encoding: utf-8'''Python程序员面试算法宝典---解题总结: 第1章 链表 1.1 如何实现链表的逆序题目:给定一个带头结点的单链表,请将其逆序,即如果单链表原来为:head->1->2->3->4->5->6->7,那么逆序后变为head->7->6-&g...原创 2019-04-15 09:13:38 · 422 阅读 · 1 评论 -
Python程序员面试算法宝典---解题总结: 第1章 链表 1.5 如何找出单链表中的倒数第k个元素
#!/usr/bin/env python# encoding: utf-8'''Python程序员面试算法宝典---解题总结: 第1章 单链表 1.5 如何找出单链表中的倒数第k个元素题目:找出单链表中的倒数低k个元素,例如给定单链表: 1->2->3->4->5->6->7,则单链表的倒数第k=3个元素为5分析:记得需要用两个指针,假设...原创 2019-04-28 08:41:03 · 166 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第1章 链表 1.4 如何对链表进行重新排序
#!/usr/bin/env python# encoding: utf-8'''Python程序员面试算法宝典---解题总结: 第1章 链表 1.4 如何对链表进行重新排序题目:给定链表L0->L1->...Ln-1->Ln,把链表重新排序为L0->Ln->L1->Ln-1->L2->Ln-2...。要求:(1) 在原来链表的基...原创 2019-04-19 09:21:07 · 511 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第1章 链表 1.6 如何检测一个较大的单链表是否有环
#!/usr/bin/env python# encoding: utf-8'''Python程序员面试算法宝典---解题总结: 第1章 链表 1.6 如何检测一个较大的单链表是否有环题目:单链表有环指的是单链表中某个结点的next域指向的是链表中在它之前的某一个结点,这样在链表的尾部形成一个环形结构。如何判断单链表是否有环存在分析:老题目了,采用快慢指针,快指针每次走两步...原创 2019-04-29 09:13:59 · 196 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第1章 链表 1.7 如何把链表相邻元素翻转
#!/usr/bin/env python# encoding: utf-8'''Python程序员面试算法宝典---解题总结: 第1章 链表 1.7 如何把链表相邻元素翻转题目:把链表相邻元素翻转,例如给定链表为 1->2->3->4->5->6->7,则翻转后的链表变为2->1->4->3->6->5->...原创 2019-05-06 08:43:18 · 301 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第2章 栈、队列与哈希 2.3-2 如何对栈中元素排序
# -*- encoding: utf-8 -*-import os'''Python程序员面试算法宝典---解题总结: 第2章 栈、队列与哈希 2.3-2对栈中所有元素排序题目: 对栈进行排序,使得栈顶到栈底的元素按照从小到大的顺序。例如输入栈是{1,3,2}其中2在栈顶,排序后的栈为{3,2,1},其中1在栈顶.分析:主要思想就是首先将栈底元素移动到栈顶;这就需要...原创 2019-05-14 09:02:40 · 227 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第1章 链表 1.8 如何把链表以K个节点为一组进行翻转
#!/usr/bin/env python# encoding: utf-8'''Python程序员面试算法宝典---解题总结: 第1章 链表 1.8 如何把链表以K个节点为一组进行翻转题目:K链表翻转是指把每K个相邻的结点看成一组进行翻转,如果剩余结点不足K个,则保持不变。假设给定链表1->2->3->4->5->6->7和一个数K,如果K的...原创 2019-05-07 22:14:28 · 215 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第1章 链表 1.9 如何合并两个有序链表
#!/usr/bin/env python# encoding: utf-8'''Python程序员面试算法宝典---解题总结: 第1章 链表 1.9 如何合并两个有序链表题目:已知两个链表head1和head2各自有序(例如升序排序),请把它们合并成一个链表,要求合并后的链表仍然有序。分析:最简单的做法,就是另外新建一个链表,每次比较head1和head2链表中当前结点的...原创 2019-05-08 08:47:15 · 193 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第1章 链表 1.10 如何在只给定单链表中某个结点的指针的情况下删除该结点
#!/usr/bin/env python# encoding: utf-8'''Python程序员面试算法宝典---解题总结: 第1章 链表 1.10 如何在只给定单链表中某个结点的指针的情况下删除该结点题目:假设给定链表1->2->3->4->5->6->7中指向第5个元素的指针,要求把结点5删掉,删除后链表变为1->2->3-...原创 2019-05-08 08:55:17 · 188 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第1章 链表 1.11 如何判断两个链表(无环)是否交叉
#!/usr/bin/env python# encoding: utf-8'''Python程序员面试算法宝典---解题总结: 第1章 链表 1.11 如何判断两个链表(无环)是否交叉题目:单链表相交指的是两个链表存在完全重合的部分,如下图所示:head1->1->2->3->4 ->5->6->...原创 2019-05-11 14:30:29 · 214 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第1章 链表 1.12 如何展开链接列表
#!/usr/bin/env python# encoding: utf-8'''Python程序员面试算法宝典---解题总结: 第1章 链表 1.12 如何展开链接列表题目:给定一个有序链表,其中每个节点也表示一个有序链表,结点包含两个类型的指针:(1) 指向主链表中下一个结点的指针(在下面的代码中称为正确指针)(2) 指向此结点头的链表(在下面的代码中称为down指针)所...原创 2019-05-11 20:48:35 · 211 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第2章 栈、队列与哈希 2.1 如何实现栈
#!/usr/bin/env python# encoding: utf-8'''Python程序员面试算法宝典---解题总结: 第2章 栈、队列与哈希 2.1 如何实现栈题目:实现一个栈的数据结构,使其具有以下方法: 压栈、弹栈、取栈顶元素、判断栈是否为空以及获取栈中元素个数分析:栈的特点: 后进先出。这个看上去可以用两个队列实现一个栈。这里面的关键是获取栈中的元素,因为...原创 2019-05-11 21:38:43 · 176 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第2章 栈、队列与哈希 2.2 如何实现队列
#!/usr/bin/env python# encoding: utf-8import os'''Python程序员面试算法宝典---解题总结: 第2章 栈、队列与哈希 2.2 如何实现队列题目:实现一个队列的数据结构,使其具有入队列、出队列、查看队列首尾元素、查看队列大小等功能分析:队列的特点就是先进先出。这里最关键的一点就是查看队列首尾元素。栈和队列实际都是链表...原创 2019-05-11 22:14:35 · 205 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第二章 栈、队列与哈希 2.4 如何根据入栈序列判断可能的出栈序列
#!/usr/bin/env python# encoding: utf-8'''Python程序员面试算法宝典---解题总结: 第二章 栈、队列与哈希 2.4 如何根据入栈序列判断可能的出栈序列题目:输入两个整数序列,其中一个序列表示栈的push(入)顺序,判断另一个序列有没有可能是对应的pop(出)顺序。分析:举例,假设一个原始栈如下:1234假设栈的入顺序是...原创 2019-05-21 22:27:12 · 300 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第2章 栈、队列与哈希 2.3 如何翻转栈的所有元素
#!/usr/bin/env python# encoding: utf-8'''Python程序员面试算法宝典---解题总结: 第2章 栈、队列与哈希 2.3 如何翻转栈的所有元素题目:翻转(也叫颠倒)栈的所有元素,例如输入栈{1,2,3,4,5},其中,1处在栈顶,翻转之后的栈为{5,4,3,2,1},其中5处在栈顶。分析:栈的特点就是后进先出,本质上是一个链表。栈可...原创 2019-05-13 09:18:26 · 202 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.7 如何判断一个数组是否是二元查找树后续遍历的序列
# -*- coding: utf-8 -*-'''Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.7 如何判断一个数组是否是二元查找树后续遍历的序列题目:输入一个整数数组,判断该数组是否是某二元查找树的后续遍历的结果,如果是,那么返回true,否则返回false。例如数组[1, 3, 2, 5, 7, 6, 4]就是下图中二叉树的后续遍历序列。 ...原创 2019-06-12 22:16:08 · 218 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.8 如何找出排序二叉树上任意两个结点 的最近共同父节点
# -*- coding: utf-8 -*-'''Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.8 如何找出排序二叉树上任意两个结点的最近共同父节点题目:对于一棵给定的排序二叉树,求两个结点的共同父结点,例如在下图中,结点1和结点5的共同父结点为3。 6 3 ...原创 2019-06-13 09:08:08 · 344 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第二章 栈、队列与哈希 2.5 如何用O(1)的时间复杂度求栈中最小元素
#!/usr/bin/env python# encoding: utf-8'''Python程序员面试算法宝典---解题总结: 第二章 栈、队列与哈希 2.5 如何用O(1)的时间复杂度求栈中最小元素分析:O(1)时间查找到最小的元素最容易实现的方式就是将最小元素始终放在栈顶,这样每次只需要获取栈顶元素,即可获取最小元素。那么问题的关键就是如何在压入元素的时候确保最小元素在...原创 2019-06-07 11:05:31 · 194 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第二章 栈、队列与哈希 2.6 如何用两个栈模拟队列操作
#!/usr/bin/env python# encoding: utf-8'''Python程序员面试算法宝典---解题总结: 第二章 栈、队列与哈希 2.6 如何用两个栈模拟队列操作分析:队列的特点就是先进先出。那其实两个栈就需要模拟出先进先出的特点。本质就是让最先进入的元素在栈顶即可。模拟队列的push操作:如果两个栈s1,s2都为空,则将当前待压入元素压入栈s1中;...原创 2019-06-07 12:46:22 · 135 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.9 如何复制二叉树
# -*- coding: utf-8 -*-'''Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.9 如何复制二叉树题目:给定一个二叉树根结点,复制该树,返回新建树的根结点分析:可以先复制根节点,然后复制左子树,复制右子树;对于左子树,对左子树根节点重复上述操作,即可关键:参考:Python程序员面试算法宝典'''class Binary...原创 2019-06-13 21:57:08 · 216 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.10 如何在二叉树中找出与输入整数相等的所有路径
# -*- coding: utf-8 -*-'''Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.10 如何在二叉树中找出与输入整数相等的所有路径题目:从树的根节点开始往下访问一直到叶子结点经过的所有节点形成一条路径。找出所有的这些路径,使其满足这条路径上所有结点数据的和等于给定的整数。例如:给定如下二叉树与整数8,满足条件的路径为: 6->3->...原创 2019-06-14 09:11:00 · 189 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第4章 数组 4.6 寻找数组中第k小的元素
# -*- encoding: utf-8 -*-'''Python程序员面试算法宝典---解题总结: 第4章 数组 4.6 寻找数组中第小大的元素题目:寻找数组中第k小的元素关键:1 主函数中low = high必须保留 # 如果恰好 index是low = high的时候并且是第k小的元素,需要特殊处理 # 如果去除=号, [1, 1, 0, 0, 1, 0...原创 2019-06-18 21:55:55 · 269 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第4章 数组 4.9 如何求数组中绝对值最小的数
# -*- encoding: utf-8 -*-'''Python程序员面试算法宝典---解题总结: 第4章 数组 4.9 如何求数组中绝对值最小的数题目:有1个升序排列的数组,数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,例如:数组[-10, -5, -2, 7, 15, 50],该数组中绝对值最小的数是-2。分析:看上去绝对值最小的数会尽可能分布在数组的中间...原创 2019-06-18 22:42:45 · 354 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第4章 数组 4.11 如何找出数组中出现1次的数
# -*- encoding: utf-8 -*-'''Python程序员面试算法宝典---解题总结: 第4章 数组 4.11 如何找出数组中出现1次的数题目:一个数组里,除了三个数是唯一出现的,其余的数都出现偶数次,找出这三个数中的任意一个。比如数组序列为[1,2,4,5,6,4,2],只有1,5,6这三个数字是唯一出现的,数字2与4均出现了偶数次(2次),只需要输出数字1,...原创 2019-06-19 09:03:38 · 398 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第二章 栈、队列与哈希 2.7 如何设计一个排序系统
#!/usr/bin/env python# encoding: utf-8'''Python程序员面试算法宝典---解题总结: 第二章 栈、队列与哈希 2.7 如何设计一个排序系统题目:请设计一个排队系统,能够让每个进入队伍的用户都能看到自己在队列中所处的位置和变化,队伍可能随时有人加入和退出;当有人退出影响到用户的位置的排名时需要及时反馈到用户。分析:实际就是实现一个队...原创 2019-06-09 09:05:01 · 163 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第二章 栈、队列与哈希 2.8 如何实现LRU缓存方案
# -*- coding: utf-8 -*-'''Python程序员面试算法宝典---解题总结: 第二章 栈、队列与哈希 2.8 如何实现LRU缓存方案题目:LRU就是最近最少使用,请实现。分析:最近最少使用实际就是在缓存不够的时候将最先进入的删除掉,那么这就可以使用队列完成。将需要删除的最前面的n个元素删除即可。使用双向链表来实现队列,队列最大容量为缓存大小。把最近使用...原创 2019-06-09 10:40:28 · 133 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第二章 栈、队列与哈希 2.9 如何从给定的车票中找出旅程
# -*- coding: utf-8 -*-'''Python程序员面试算法宝典---解题总结: 第二章 栈、队列与哈希 2.9 如何从给定的车票中找出旅程题目:给定一趟旅途旅程中所有的车票信息,根据这个车票信息找出这趟旅程的路线。例如:给定下面的车票: 西安到成都,北京到上海,大连到西安,上海到大连。那么可以得到旅程的路线为: 北京->上海,上海->大连,大连-&...原创 2019-06-09 11:49:35 · 238 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第二章 栈、队列与哈希 2.10 如何从数组中找出满足 a+b=c+d 的两个数对
# -*- coding: utf-8 -*-'''Python程序员面试算法宝典---解题总结: 第二章 栈、队列与哈希 2.10 如何从数组中找出满足 a+b=c+d 的两个数对题目:给定一个数组,找出数组中是否有两个数对(a, b)和(c, d), 使得 a+b=c+d,其中, a、b、c和d是不同的元素。如果有多个答案,打印任意一个即可。例如给定数组:[3, 4, 7, ...原创 2019-06-09 12:29:17 · 285 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.11 如何对二叉树进行镜像反转
# -*- coding: utf-8 -*-'''Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.11 如何对二叉树进行镜像反转题目:二叉树的镜像就是二叉树堆成的二叉树,就是交换每一个非叶子节点的左子树指针和右子树指针,如下图所示,请写出能实现该功能的代码。注意: 请勿对该树做任何假设,它不一定是平衡树,也不一定有序。原始树: ...原创 2019-06-14 19:54:24 · 210 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.12 如何在二叉排序树中找出第一个大于中间值的结点
# -*- coding: utf-8 -*-'''Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.12 如何在二叉排序树中找出第一个大于中间值的结点题目:对于一棵二叉排序树,令f=(最大值+最小值)/2,设计一个算法,找出距离f值最近、大于f值的结点。例如: 下图所给定的二叉排序树种,最大值为7,最小值为1,因此,f=(1+7)/2=4,那么在这颗二叉树中,...原创 2019-06-14 21:21:00 · 224 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.1 二叉树基础知识
# -*- coding: utf-8 -*-'''Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.1 二叉树基础知识基础:二叉树含义:是空树,或者是由一个根节点和左子树和右子树组成的非空树。结点的度: 结点的子树的个数结点层数: 树的根节点层数为1树的深度: 最大层数满二叉树: 所欲分支节点都有左右子树,所有叶子节点在同一层完全二叉树: 叶子节点只...原创 2019-06-10 07:58:31 · 320 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.2 如何把一个有序整数数组放到二叉树中
# -*- coding: utf-8 -*-'''Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.2 如何把一个有序整数数组放到二叉树中关键:1 书上解法将数组中间元素作为根节点,然后分别对数组中间元素左半部分和右半部分分别再建立二叉树。重复上述过程,直到左半部分或者右半部分只有一个元素。2 二叉树的遍历方式先序遍历:先访问根节点,然后访问左孩子,最...原创 2019-06-10 08:32:17 · 244 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.13 如何在二叉树中找出路径最大的和
# -*- coding: utf-8 -*-'''Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.13 如何在二叉树中找出路径最大的和题目:给定一棵二叉树,求各个路径的最大和,路径可以以任意结点作为起点和终点。比如给定以下二叉树: 2 5 3最大和的路径为结点5->2->3,这条路径的和为10,...原创 2019-06-15 10:01:29 · 212 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.14 如何实现反向DNS查找缓存
# -*- coding: utf-8 -*-'''Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.14 如何实现反向DNS查找缓存题目:反向DNS查找指的是使用Internet IP地址查找域名。例如,如果你在浏览器中输入74.125.200.106,它会自动重定向到google.com。如何实现反向DNS查找缓存。分析:最简单的方法就是用一个字典,建...原创 2019-06-15 11:17:05 · 251 阅读 · 1 评论 -
Python程序员面试算法宝典---解题总结: 第4章 数组 4.1 如何找出数组中唯一的重复元素
# -*- coding: utf-8 -*-'''Python程序员面试算法宝典---解题总结: 第4章 数组 4.1 如何找出数组中唯一的重复元素题目:数字1~1000放在含有1001个元素的数组中,其中只有唯一的一个元素值重复,其他数字均只出现一次。设计一个算法,将重复元素找出来,要求每个数组元素只能访问一次。如果不使用辅助存储空间,能否设计一个算法实现?分析:最简单...原创 2019-06-15 12:39:03 · 272 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第4章 数组 4.1_2 如何找出数组中重复元素序列
# -*- coding: utf-8 -*-'''Python程序员面试算法宝典---解题总结: 第4章 数组 4.1_2 如何找出数组中重复元素序列题目:对于一个给定的自然数N,有一个N+M个元素的数组,其中存放了小于等于N的所有自然数,求重复出现的自然数序列[X]分析:关键:1 书上解法采用这种形式: array[ array[index] ]的形式判断某个元...原创 2019-06-15 13:07:43 · 303 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第4章 数组 4.12 如何对数组旋转
# -*- coding: utf-8 -*-'''Python程序员面试算法宝典---解题总结: 第4章 数组 4.12 如何对数组旋转题目:请实现方法: print_rotate_matrix(intmatrix, int n),该方法用于将一个n*n的二维数组逆时针旋转45度后打印,例如,下图显示一个3*3的二维数组及其旋转后屏幕输出的效果1 2 34 5 67 8 ...原创 2019-06-19 23:06:49 · 512 阅读 · 0 评论 -
Python程序员面试算法宝典---解题总结: 第4章 数组 4.13 如何在不排序的情况下求数组中的中位数
# -*- coding: utf-8 -*-'''Python程序员面试算法宝典---解题总结: 第4章 数组 4.13 如何在不排序的情况下求数组中的中位数题目:所谓中位数就是一组数据从小到大排序后中间的那个数字。如果数组长度为偶数,那么中位数的值就是中间两个数字相加除以2,如果数组长度为奇数,那么中位数的值就是中间那个数字。分析:实际就是求第k小的数的变形版本。当数...原创 2019-06-20 09:01:48 · 400 阅读 · 0 评论