![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python刷数据结构
R戎
这个作者很懒,什么都没留下…
展开
-
剑指面试题3-数组中重复的数字
# -*- coding:utf-8 -*-class Solution: # 这里要特别注意~找到任意重复的一个值并赋值到duplication[0] # 函数返回True/False def duplicate(self, numbers, duplication): # write code here if not numbers:...原创 2019-02-19 09:01:35 · 195 阅读 · 0 评论 -
leetcode 18 四数之和 python
题目:给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:...原创 2019-03-29 14:32:40 · 473 阅读 · 0 评论 -
LeetCode 22括号生成python实现
题目:给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]方法一:暴力法思路我们可以生成所有 2^{2n}22n个 ‘(’ 和 ‘)’ 字符构成的序列。然后,我们将检查每一个是否有效。...原创 2019-03-30 19:51:43 · 401 阅读 · 0 评论 -
LeetCode 29 两数相除
题目:给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。示例 1:输入: dividend = 10, divisor = 3输出: 3示例 2:输入: dividend = 7, divisor = -3输出: -2说明:被除数和除数均为 32...原创 2019-03-30 20:12:08 · 215 阅读 · 0 评论 -
LeetCode 11 盛水最多的容器 python实现
题目:给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。思路:这道题最粗暴的方法当然是O(n^2),当然对于medium难度的题目来说,显然不能这么做 ...原创 2019-03-26 21:55:47 · 169 阅读 · 0 评论 -
LeetCode 12 整数转罗马数字 python
题目罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 ...原创 2019-03-27 08:45:41 · 118 阅读 · 0 评论 -
LeetCode 13 罗马数字转整数 python
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。1...原创 2019-03-27 08:48:00 · 160 阅读 · 0 评论 -
LeetCode 23合并K个排序链表
题目:合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6一、暴力解决class Solution(object): def mergeKLists(self,...原创 2019-03-31 10:00:36 · 118 阅读 · 0 评论 -
LeetCode26 删除排序数组中的重复项
题目:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。示例 2:...原创 2019-03-31 10:43:08 · 113 阅读 · 0 评论 -
LeetCode 15 三数之和 python
题目 :给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]class Sol...原创 2019-03-27 09:44:05 · 129 阅读 · 0 评论 -
leetcode 24两辆交换链表中的节点 python实现
题目:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.# Definition for singly-linked list.# class ListNode:# def __init__(self,...原创 2019-03-27 16:10:31 · 207 阅读 · 0 评论 -
剑指面试题27-二叉树的镜像python实现
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5# -*- cod...原创 2019-03-27 21:05:56 · 191 阅读 · 0 评论 -
剑指面试题28-对称的二叉树 python实现
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.righ...原创 2019-03-27 21:23:11 · 186 阅读 · 0 评论 -
LeetCode33 搜索旋转排序数组 python实现
题目:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [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], tar...原创 2019-04-01 19:55:08 · 224 阅读 · 0 评论 -
LeetCode 10 正则表达式匹配 python实现
题目:给定一个字符串 (s) 和一个字符模式 §。实现支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符。‘*’ 匹配零个或多个前面的元素。匹配应该覆盖整个字符串 (s) ,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输入:s = "aa"p = "a"输...原创 2019-03-28 19:43:26 · 225 阅读 · 0 评论 -
LeetCode 20 有效的括号 python实现
题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]"输出: false示例 4:输入...原创 2019-03-28 19:56:23 · 183 阅读 · 0 评论 -
剑指面试题29-顺时针打印矩阵 python
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.# -*- coding:utf-8 -*-class Solution: # matrix类型为二维列表,需要返回列表 def printMatrix(self, matrix):...原创 2019-03-28 20:10:05 · 114 阅读 · 0 评论 -
LeetCode 17 电话号码的字母组合 python实现
题目:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序class Solution: ...原创 2019-03-29 14:16:24 · 325 阅读 · 0 评论 -
[leetcode 4] 寻找两个有序数组的中位数 python
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 + 3)...原创 2019-03-25 21:33:32 · 134 阅读 · 0 评论 -
剑指面试题4-二维数组中的查找
题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路矩阵是有序的,从左下角来看,向上数字递减,向右数字递增,因此从左下角开始查找,当要查找数字比左下角数字大时。右移要查找数字比左下角数字小时,上移# -*- coding:utf-8 -...原创 2019-02-20 09:30:21 · 94 阅读 · 0 评论 -
剑指面试题5-替换空格
题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“We are happy.”,则输出“We%20are%20happy.”。分析: 首先要搞清楚面试官的问题,是改变原字符串还是重新创建。(1)时间复杂度为O(n^2)的解法 不足以拿到offer从头到尾遍历字符串,每遇到一个空格替换一次,替换一个空格后面的字符需要移动O(n)次,n个空格所以时间复杂度为o(n^2)(...原创 2019-02-26 22:14:31 · 103 阅读 · 0 评论 -
剑指面试题18-删除链表的节点
题目描述:给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。样例给定 1->2->3->4,和节点 3,删除 3 之后,链表应该变为 1->2->4。在单向链表中删除一个节点,常规的做法无疑是从链表的头节点开始,顺序遍历查找要删除的节点,并在链表中删除该节点。比如在如图3.3(a)所示的链表中,我们想删除节点i,可...原创 2019-03-14 10:27:16 · 138 阅读 · 0 评论 -
剑指面试15变形-删除链表中重复的节点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5# -*- coding:utf-8 -*-class ListNode: def __init__(self, x): self.val =...原创 2019-03-14 10:48:09 · 84 阅读 · 0 评论 -
剑指面试题21-调整数组顺序使奇数位于偶数前面
题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分思路:我认真看了一下,题目应该是要求在原地调整,所以这里不能再开辟一个数组第一种:从头往尾扫描数组,遇到一个偶数就把它提出来,依次把其后的数字前移一格,最后将偶数插入末尾的空位。时间复杂度为O(n2)(不能够拿到offer)# -*- coding:utf-...原创 2019-03-15 09:15:40 · 74 阅读 · 0 评论 -
剑指面试题7-重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回根节点。算法设计思想前序遍历序列的第一个元素为根结点的值,然后在中序遍历序列中寻找根节点的值的位置(索引)。从中序遍历序列的起始位置到根结点的值的位置...原创 2019-03-11 10:16:40 · 103 阅读 · 0 评论 -
剑指面试题8-二叉树的下一个节点
题目描述:给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右子节点的指针,还有一个指向父节点的指针。解题思路:这道题意即:给定一个节点,按照中序遍历(左根右)的方式求该节点的下一个节点。有三种情况:给定的节点为空——返回空;给定的节点有右子树——沿着该右子树,返回右子树的第一个左叶子节点;给定的节点没有右子树——如果位于某个节点的左子...原创 2019-03-11 11:27:06 · 135 阅读 · 0 评论 -
剑指面试题22-链表中倒数第k个节点
题目:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。第一种实现: 遍历放在列表中,但是会增加空间复杂度# -*- coding:utf-8 -*-# class ListNode:# def __...原创 2019-03-16 08:52:25 · 124 阅读 · 0 评论 -
剑指面试题23-链表中环的入口节点
题目:如果一个链表中包含环,如何找出环的入口节点?例如,在如|图3.8所示的链表中,环的入口节点是节点3。思路:解决这个问题的第一步是如何确定一个链表中包含环。受到面试题22的启发,我们可以用两个指针来解决这个问题。和前面的问题一样,定义两个指针,同时从链表的头节点出发,一个指针一次走一步,另一个指针一次走两步。如果走得快的指针追上了走得慢的指针,(相遇时)那么链表就包含环;如果走得快的指针走到...原创 2019-03-16 10:11:27 · 121 阅读 · 0 评论 -
剑指面试题10-斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。递归实现:class Solution(): def Fibnacci(self,n): if n <= 0: return 0 if n == 1: return 1 return ...原创 2019-03-11 21:42:28 · 146 阅读 · 0 评论 -
剑指面试题9-用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。class Solution: def __init__(self): self.stack1 = [] self.stack2 = [] def push(self,node): self.stack1.append(node) def p...原创 2019-03-12 11:05:35 · 129 阅读 · 0 评论 -
剑指面试题11-旋转数组中的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。算法设计思想暴力查找(Bruteforce Search):把旋转数组从前到后遍历一遍,其时间复杂度为 O...原创 2019-03-12 11:09:58 · 150 阅读 · 0 评论 -
剑指面试题15-二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。方法1: -*- coding:utf-8 -*-class Solution: def NumberOf1(self, n): # write code here return sum([(n>>i & 1) for i in range(0,32)])...原创 2019-03-12 11:11:26 · 121 阅读 · 0 评论 -
剑指面试题24-反转链表 leetcode 206
题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。分析:需要把头结点的next设置为None,需要保存下一个节点,防止链表断开。非递归实现:# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next...原创 2019-03-16 15:54:23 · 141 阅读 · 0 评论 -
剑指面试题25-合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。例如,输入图3.11中的链表1和链表2,则合并之后的升序链表如链表3所示。此思路类似归并排序# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.nex...原创 2019-03-16 16:21:06 · 193 阅读 · 0 评论 -
剑指面试26-数的子结构
题目:输入两棵二叉树A和B,判断B是不是A的子结构。# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def ...原创 2019-03-17 16:09:49 · 121 阅读 · 0 评论 -
python 实现堆排序
1、概念堆排序是利用 堆进行排序的堆是一种完全二叉树堆有两种类型: 大根堆 小根堆两种类型的概念如下:大根堆:每个结点的值都大于或等于左右孩子结点小根堆:每个结点的值都小于或等于左右孩子结点完全二叉树完全二叉树 是 一种除了最后一层之外的其他每一层都被完全填充,并且所有结点都保持向左对齐的树,向左对齐指的是:下面这样的树不是完全二叉树:如果给上面的大...原创 2019-07-09 22:45:46 · 276 阅读 · 0 评论