剑指Offer刷题
皮皮先生
这个作者很懒,什么都没留下…
展开
-
剑指Offer 03 数组中重复的数字 (python)
题目描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。思路:(1)利用python的字典(哈希),遍历数组,如果数组的元素已经存在于字典中,则此元素是重复元素,输出。若不在字...原创 2019-04-22 14:46:51 · 359 阅读 · 0 评论 -
最长的不含重复字符的子串
#思路一:暴力法:先求一个字符串的所有子串,然后遍历所有的子串,求不重复的最长长度def max_sub_str(string1): n=len(string1) list1=[] #求一个字符串的所有子串 for i in range(n): for j in range(n-i): list1.append(strin...原创 2019-08-14 16:58:28 · 207 阅读 · 0 评论 -
最长回文子串
题目描述:求一个字符串的最长回文子串def maxhuiwen(s): k=len(s) martix=[[0 for i in range(k)] for j in range(k)] len1=0 substr="" for j in range(k): for i in range(0,j+1): if j...原创 2019-08-14 16:55:45 · 98 阅读 · 0 评论 -
【剑指Offer】删除链表中重复的结点
题目描述:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5解题方法要删除有序链表中所有的重复节点,而头结点有可能就是重复节点。这样的比较好的解决方式就是新建头结点,然后往后遍历,同样的值就全部略过。# -*- ...原创 2019-05-30 22:07:00 · 140 阅读 · 0 评论 -
剑指Offer 剪绳子
题目: 给你一根长度为n绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1)。每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0] * k[1]*…*k[m]可能的最大乘积是多少?例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18。思路:动态规划思想:即:长度为10的绳子,我们就计算出:长度1~9这9种长度的绳子,每种长度的最大乘...原创 2019-05-27 17:21:58 · 439 阅读 · 5 评论 -
python 二叉树的下一个节点
题目: 给定一颗二叉树金额其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右子节点的指针,还有一个指向父节点的指针思路:分两种情况:(1)当给定的节点有右孩子时,下一个节点就是其右子树中的最左节点 (2)当给定的节点没有右孩子时,节点不是根节点。如果该节点是其父节点的左孩子,则返回父节点...原创 2019-05-13 15:44:32 · 788 阅读 · 0 评论 -
剑指Offer 12 矩阵中的路径
题目描述:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串”bcced”的路径,但是矩阵中不包含”abcb”路径,因为...原创 2019-05-22 15:43:16 · 250 阅读 · 0 评论 -
剑指Offer 11 旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序数组的一个旋转,输出旋转数组的最小元素,例如,数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1.思路:设置两个指针。利用二分查找法。第一个指针指向第一个元素,第二个指向最后一个元素。找到数组的中间元素,如果中间的元素大于第一个元素,此时数组中最小的元素应该位于中间元素的后面,...原创 2019-05-22 14:23:02 · 106 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路:思路一:新建一个新的数组,遍历两边原数组,第一遍将原数组的奇数添加到新数组中,第二遍将原数组的偶数添加到新数组中。思路二:利用冒泡排序的思想,双层遍历更改交换条件即可。 第二个交换条件为如果j为奇数,j-1为...原创 2019-05-24 16:55:50 · 106 阅读 · 0 评论 -
(Python实现)剑指offer—重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路前序遍历:根节点->左子树->右子树中序遍历:左子树->根节点->右子树后序遍历:左子树->右子树->...原创 2019-05-09 16:54:43 · 182 阅读 · 0 评论 -
反转链表
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点,链表节点定义如下:class ListNode: def __init__(self, x): self.val = x self.next = None思路一:新建一个链表,利用头插法反转该链表class ListNode: def __init__(s...原创 2019-05-05 10:43:59 · 86 阅读 · 0 评论 -
二进制中1的个数,二进制中的1的个数奇偶
题目描述:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。思路:1)步骤:1)整数n和1进行与运算,结果为真则计1;2)将1进行左移(为2)再和n进行与运算,结果为真则计1;3)依次循环,直到最后。代码:class Solution(object): def hammingWei...原创 2019-04-28 15:26:58 · 675 阅读 · 0 评论 -
两个栈实现队列,python实现
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题思路根据题目,要求两个栈来实现队列的Push和Pop操作,已知栈是后入先出型,队列是先入先出型,需要利用栈后入先出的特点实现队列先入先出的特点。入栈时数据存入栈stackIn, 出栈时数据从stackOut弹出。执行入栈操作时,将数据源源不断的压入栈stackIn;执行出栈操作时,将stackI...原创 2019-04-27 09:45:41 · 332 阅读 · 0 评论 -
剑指Offer 04 二维数组中的查找(python)
题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数组,行下标减1;如果该数字小于要查找的数字,列下标加一。直到找到要查找的数字,或者查找范围为空。示例1:输...原创 2019-04-22 15:46:31 · 306 阅读 · 1 评论 -
两个链表的第一个公共节点
思路一:蛮力法:在第一个链表上遍历每个节点,每遍历一个节点,就在第二个链表上顺序遍历每个节点。有相同的,则指向他们的公共节点思路二:分别把两个链表的节点放入到两个栈里,这样两个链表的尾节点就位于两个栈的栈顶,接下来比较两个栈顶的节点是否相同。如果相同,则把栈顶元素弹出,接着比较下一个栈顶。直到找到最后一个相同的节点。思路三:首先遍历两个链表得到他们的长度,求出长的比短的多出x个节点。第二次...原创 2019-08-14 17:14:31 · 136 阅读 · 0 评论