
剑指offer
yzhua_777
这个作者很懒,什么都没留下…
展开
-
python带你解决两个链表中的公共节点问题
题目描述输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)解题思路:两个有共同节点的链表是Y型结构,也就是自第一个公共节点开始,都是重合的。题目要求,要找到第一个公共节点,可以反其道而行之,从后往前找,如果是重合节点,这两个节点一定是相等的,所以最后一个相等的节点就是第一个公共的节点。具体方法可以先将每个链表中的节点循环添加到栈中,然后从栈中弹出,一一比较即可class ListNode(self, x): self.v原创 2020-05-31 16:04:58 · 417 阅读 · 0 评论 -
使用python带你解决链表深拷贝
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)解题思路:先把原链表进行复制,将复制的节点加在原节点的后面,链接起来;将复制节点的random指针指向原节点的random指针,A.next.random = A.random.next,最后再断开原先的链接,从新链接就可以了从上面图中就可以看出具体的思路ok原创 2020-05-31 15:35:13 · 752 阅读 · 0 评论 -
python 给定一个字符串,输出所有指定长度为n的子串,没有则输出-1
给定一个字符串,输出所有指定长度为n的子串,没有则输出-1原创 2020-05-30 22:42:22 · 2599 阅读 · 0 评论 -
python 输入两个递增的链表,输出两个链表合成后的链表
三种方法带你解决合并递增链表,快来看看吧原创 2020-05-30 22:08:48 · 498 阅读 · 0 评论 -
看我使用两个指针输出反转链表的表头(python)
题目描述输入一个链表,反转链表后,输出新链表的表头。解题思路:特殊情况,链表为空以及链表中只有一个节点时,表头就是head.定义两个游标指针,一个头指针,一个指向头节点前面的的一个指针。循环移动,移动过程中反转链表,直到头指针指向None的时候,此时原头结点前的指针便是表头。ok,来看一下具体实现的方法:class ListNode: def __init__(self, elem): self.elem = elem self.next = Noneclass Solution:原创 2020-05-18 16:25:10 · 247 阅读 · 0 评论 -
python 输入一个链表,输出该链表中倒数第k个节点。
python 输入一个链表,输出该链表中倒数第k个节点原创 2020-05-18 11:31:30 · 1096 阅读 · 0 评论 -
python 输入一个链表,按链表从尾到头的顺序返回一个ArrayList
python 输入一个链表,按链表从尾到头的顺序返回一个ArrayList原创 2020-05-18 10:11:29 · 509 阅读 · 0 评论 -
python栈的压入与弹出
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题思路:首先我们需要一个栈来进行压入,每压入一个元素就要和出栈的第一个元素比较判断,不相等,继续压入,直至两个元素相等,之后,弹出,向后移动,循环知道压栈遍历结束。最后如果辅助栈为空,说原创 2020-05-17 22:18:33 · 946 阅读 · 0 评论 -
python 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。原创 2020-05-17 20:36:44 · 616 阅读 · 0 评论 -
python解决数组奇数和偶数位置排序问题
python输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,且保证奇数和偶数是按照大小顺序排列的原创 2020-05-17 19:59:19 · 4882 阅读 · 1 评论 -
二分法查找的两种方法
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。#非递归实现二分查找def binary_search(array, target): left = 0 right = len(array)-1 while left <= right: mid = (left+right)//2 if array[mid] == target: return True原创 2020-05-10 22:17:29 · 481 阅读 · 0 评论 -
二分查找解决最小值问题
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0这样理解起来就很简单了class Solution: def minNumberInRotateArray(self, rotateArray): #首先判断数组是否为空 if no原创 2020-05-10 22:00:41 · 2122 阅读 · 0 评论 -
两个栈组成一个队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解析:两个栈实现一个队列,我们知道栈是先进后出,后进先出的,而队列是先进先出。由上面的这个图就可以简单的理解怎样的过程了。ok, show the codeclass Solution: def __init__(self): #定义两个栈 self.ac...原创 2020-05-07 21:37:54 · 168 阅读 · 0 评论 -
一行代码搞定空格替换
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。这里我们使用python中的函数,一行代码就可以解决我们想要解决的问题了。Talk is cheap, show me the code!class Solution: def replaceSpace(self, s...原创 2020-04-18 21:31:25 · 326 阅读 · 0 评论 -
二维数组找数字
题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。第一种方法:(直接遍历)class Solution: def Find(self, target, array): for i in range(0, len(array)...原创 2020-04-18 19:56:01 · 238 阅读 · 0 评论 -
简单易懂的斐波那契数列
题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39像这样的数列:0 1 1 2 3 5 8…第一项 0第二项 1第三项 1第四项 2从第三项开始的数值是前两项数值的和解答一:非递归算法:class Solution: def Fibonacci(self, n): if n == 0...原创 2020-04-17 10:09:02 · 280 阅读 · 0 评论