算法相关
文章平均质量分 50
算法相关
fanjia2shao
这个作者很懒,什么都没留下…
展开
-
栈的压入弹出序列
栈的压入弹出序列题目描述思路题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路我们以:1 2 3 4 5 进行压入,下面的:2 4 5 3 1 是弹出序列首先我们需要有一个栈,列表按照pushV的方式压入栈弹出的时候,需要循环判原创 2021-01-22 10:55:44 · 56 阅读 · 0 评论 -
链表中倒数第K个节点
从尾到头打印链表题目描述思考题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。思考在python中定义链表# 链表结构class ListNode: def __init__(self, x): self.val = x self.next = None# 打印链表def printChain(head): node = head while node: print(node.原创 2021-01-21 17:16:48 · 55 阅读 · 0 评论 -
反转链表
反转链表描述思考描述输入一个链表,反转链表后,输出新链表的表头。思考这个时候,我们就不能使用上一题的做法了反转后步骤:将现有的头换成尾,尾部的next换成None将从第二个指针node开始,循环将next指向前一个需要一直有一个指针指向还没有反转的链表的头部我们需要有三个指针,一个是左指针,中指针,右指针# 反转链表# 输入一个链表,反转链表后,输出新链表的表头。# 链表结构class ListNode: def __init__(self, x):原创 2021-01-21 17:16:37 · 81 阅读 · 0 评论 -
合并两个排序的链表
合并两个排序的链表描述思考描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思考先有两个单调递增的链表合并后从上图发现,我们一共需要4个指针,第一个是头指针,第二个和第三个分别是控制两个链表的移动的指针,第四个指针是最小值的指针(前面的指针)。class Solution: # 返回合并后列表 def Merge(self, pHead1, pHead2): if pHead1 == None:原创 2021-01-21 17:16:23 · 46 阅读 · 0 评论 -
复杂链表的复制
复杂链表的复制描述思考思考2描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思考下图是复杂链表的数据结构# 链表结构class RandomListNode: def __init__(self, x): self.label = x self.next =原创 2021-01-21 17:16:11 · 64 阅读 · 0 评论 -
两个链表的公共结点
两个链表的公共结点描述思考描述输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)思考也就是说两个链表具有公共的部分第一种方式就是遍历两个链表,找出公共的节点,并且时间复杂度为: O(n^2)第二种方式,只需要花费 O(n)的时间复杂度首先我们需要准备两个指针,第一个指针指向第一个的头部,另一个指向第二个链表的头部,然后我们同时移动这两个指针,当有一个指针到头的时候,另一个指针还没有到头,我们记录到这个差值N然后原创 2021-01-21 17:15:58 · 1577 阅读 · 0 评论 -
孩子们的游戏(圆圈中最后剩下的数)
@TOC描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!_)。请你试着想下,哪个小朋原创 2021-01-21 17:15:45 · 74 阅读 · 0 评论 -
链表中环的入口结点
链表中环的入口结点描述思考描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null思考如何确定是否有环把所有出现的点,都放到list中如果下次的节点,在list中出现,说明出现了环但是这种时间复杂度比较高第二种方式定义:两个 指针,一个是慢指针,一个是快指针假设 slow 走了 L 步,那么 fast 就走了 2L 步。我们 链表的头部 到 链表的环的入口结点处 的距离是 S那么 从入口结点 到 我们 快慢指针相遇的地点 的距离 为 d。链表的环中,慢指针原创 2021-01-21 17:15:27 · 56 阅读 · 0 评论 -
二进制中的1的个数
二进制中的1的个数描述补码按位取反 ~描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示补码正数不变,负数就是它的正数的反码 + 1一个负整数(或原码)与其补数(或补码)相加,和为模。对一个整数的补码再求补码,等于该整数自身。补码的正零与负零表示方法相同-2 的 补码:-2 的二进制为 1 0 0 0 0 …0 0 0 1 0 ,-2 的 反码为: 1 1 1 1 1 …1 1 1 0 1-2 的 补码为: 1 1 1 1 1 …1 1 1 1 0对于原创 2021-01-21 17:15:13 · 74 阅读 · 0 评论 -
不用加减乘除做加法
不用加减乘除做加法描述思考描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思考对于数字运算,如果说四则运算不能用的话,那么我们只能用位运算来做了。我们以 5 + 17 为例 结果为 22,那么 22 的计算结果,我们可以分为三步 来进行: 第一步: 只做各位相加不进位 也就是说 没一位上的数字 相应的来相加 但是不进位,那么 5 + 7 为 12 个位数 5 和 7 相加 不进位 是2 十位是0 和1 相加 为 1 第二步: 5 + 7 中有进原创 2021-01-21 17:14:52 · 92 阅读 · 0 评论 -
包含min函数的栈
包含min函数的栈题目描述思路代码题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。思路我们需要维护一个最小值的数组,这个数组存储每次push元素时候的最小值 # 压栈 def push(self, node): self.stack.append(node) # 维护当前最小的数组原创 2021-01-22 10:55:54 · 45 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
调整数组顺序使奇数位于偶数前面题目描述思考代码题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思考我们要做的就是下面的这种效果,把奇数提取出来,放在一个数组中,然后在把偶数放在另外一个数组中,最后将两个数组合并代码# 调整数组顺序使奇数位于偶数前面# 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,# 所有的偶数位于原创 2021-01-18 17:11:50 · 63 阅读 · 0 评论 -
旋转数组的最小数字
旋转数组的最小数字题目描述暴力破解方式2题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。暴力破解第一种方法就是遍历全部的元素,然后找出最小的,时间复杂度为:O(n)class Solution: def minNumberInRotateArray(self原创 2021-01-18 17:01:20 · 125 阅读 · 1 评论 -
两个栈实现一个队列
两个栈实现一个队列题目描述思考代码题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思考栈:先进后出队列:先进先出.我们需要使用一个栈用于接收数据,并且一个栈用于输出数据代码class Solution: def __init__(self): # 接收栈 self.acceptStack = [] # 输出栈 self.outputStack = []原创 2021-01-18 16:57:36 · 56 阅读 · 0 评论 -
替换空格
替换空格题目描述调用方法实现自己写方法实现Replace题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。调用方法实现class Solution: # s 源字符串 def replaceSpace(self, s): return s.replace(' ', '%20')自己写方法实现Replace我们将字符串存储在数组中,然后循环原创 2021-01-18 16:55:45 · 55 阅读 · 0 评论 -
二维数组中的查找
二维数组中的查找题目描述暴力算法标准解法题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。暴力算法下面是这样一个规律的二维数组1 2 3 4 2 3 4 5 4 6 7 109 11 13 15我们对每个数字进行遍历class Solution: def Find(self, target, array):原创 2021-01-18 16:49:55 · 140 阅读 · 1 评论 -
找出丑数
找出丑数题目思路1思路2题目把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路1死循环,找丑数判断一个数是不是丑数,先循环除以2,直到不能整除,循环除以3 直到不能整除,循环除以5 直到不能整除。这时如果剩余的值是1 我们就说它是丑数,其他情况就都不是丑数class Solution: def GetUglyNumber_Solution(self,原创 2021-01-18 16:42:31 · 101 阅读 · 0 评论 -
青蛙跳台阶
青蛙跳台阶题目找规律题目一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)找规律代码实现class Solution: def JumpFloor(self, n): if n == 0: return 0; if n == 1: return 1; if n == 2: return 2原创 2021-01-18 16:32:03 · 63 阅读 · 0 评论 -
斐波那契数列
斐波那契数列题目菲波那切数列是什么递归方法实现非递归实现题目大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39菲波那切数列是什么0 1 1 2 3 5 8 13n = 0, num = 0n = 1, num = 1n = 2, num = 1.....当 n = k(n>1),f(k) = f(k-1) + f(k-2)当 n = 1, f(1) = 1当 n = 0, f(0) = 0递归原创 2021-01-18 16:23:31 · 206 阅读 · 0 评论