剑指offer
呱唧响
这个作者很懒,什么都没留下…
展开
-
剑指offer - 题64~67(滑动窗口最大值,矩阵路径,机器人运动,剪绳子,最大乘积)
滑动窗口的最大值给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,原创 2020-07-01 23:34:18 · 234 阅读 · 0 评论 -
剑指offer - 题62,63(二叉搜索树,数据流中位数)
二叉搜索树的第k个结点给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: # 返回对应节点原创 2020-06-27 00:24:32 · 228 阅读 · 0 评论 -
剑指offer - 题60,61(二叉树打印,二叉树序列化)
把二叉树打印成多行从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: # 返回二维列表[[1,2],[4,5]] def Print(self, pRo原创 2020-06-26 00:37:30 · 147 阅读 · 0 评论 -
剑指offer - 题58,59(对称二叉树递归,之字形打印二叉树)
对称的二叉树请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def isSymmetrical(self, p原创 2020-06-24 23:29:25 · 97 阅读 · 0 评论 -
剑指offer - 题56,57(删除链表重复结点,二叉树下一个结点)
删除链表中重复的结点在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution原创 2020-06-23 23:14:46 · 132 阅读 · 0 评论 -
剑指offer - 题49~55(字符串数字转换,数组中重复的数字,乘积数组,正则匹配,字符串是否含数值,不重复字符,链表环入口结点)
把字符串转换成整数题目描述将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0示例1输入+21474836471a33输出21474836470# -*- coding:utf-8 -*-class Solution: def StrToInt(self, s): # write code原创 2020-06-22 23:39:39 · 183 阅读 · 0 评论 -
剑指offer - 题46~48(约瑟夫环,递归求和,位运算)
孩子们的游戏(圆圈中最后剩下的数)每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!_)。请原创 2020-06-21 00:08:55 · 125 阅读 · 0 评论 -
剑指offer - 题44,45(翻转单词,扑克牌顺子)
翻转单词顺序列牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?# -*- coding:utf-8 -*-class Solution: def ReverseSentence(se原创 2020-06-17 23:41:49 · 101 阅读 · 0 评论 -
剑指offer - 题41~43(双指针,左旋转字符串)
和为S的连续正数序列小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序# -*- coding:utf-8 -原创 2020-06-16 23:50:42 · 119 阅读 · 0 评论 -
剑指offer - 题39,40(平衡二叉树,位运算,异或)
平衡二叉树输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树。平衡树(Balance Tree,BT) 指的是,任意节点的子树的高度差都小于等于1。# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Nonecl原创 2020-06-15 23:21:44 · 150 阅读 · 0 评论 -
剑指offer - 题37,38(二分法,二叉树深度,递归思想)
数字在排序数组中出现的次数统计一个数字在排序数组中出现的次数。# -*- coding:utf-8 -*-class Solution: # 二分法找到k值的位置 def BinarySearch(self, data, mlen, k): start = 0 end = mlen - 1 while start <= end: mid = (start + end) / 2 if d原创 2020-06-14 23:39:14 · 96 阅读 · 0 评论 -
剑指offer - 题35,36(数组逆序对个数,链表公共节点)
数组的逆序对在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size<=10^5对于%100的数据,size<=2*10^5示例1输入1,2,3,4,5,6,7,0输出7...原创 2020-06-12 23:59:38 · 116 阅读 · 0 评论 -
剑指offer - 题33,34(丑数,质因子,字符计数)
丑数把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。# -*- coding:utf-8 -*-class Solution: def GetUglyNumber_Solution(self, index): # write code here # 丑数可以表示为2^i*3^j*4^k的形式 if not inde原创 2020-06-11 23:25:57 · 111 阅读 · 0 评论 -
剑指offer - 题30~32(最大子数组和,1的个数,排列数组元素成为最小数)
连续子数组的最大和HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)# -*- coding:utf-8 -*-cl原创 2020-06-10 23:46:15 · 98 阅读 · 0 评论 -
剑指offer - 题29(partition,最小的第k个数)
最小的k个数输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。# -*- coding:utf-8 -*-import randomclass Solution: def GetLeastNumbers_Solution(self, tinput, k): # write code here # python就是方便,此处注意k大于数组长度的情况要返回空数组: return原创 2020-06-08 00:14:33 · 106 阅读 · 0 评论 -
剑指offer - 题27、28(字符串排列,数组众数)
字符串的排列输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。# -*- coding:utf-8 -*-class Solution: def Permutation(self, ss): # write code here # write code he原创 2020-06-06 00:27:08 · 127 阅读 · 0 评论 -
剑指offer - 题25、26(链表复制,二叉搜索树与双向链表的转换)
复杂链表的复制输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)'''牛客网@Yannyezixin代码思路:1、在每个节点后面复制当前节点;2、将原节点的链接关系复制到复制节点上;3、将此链表按奇偶位置拆分成两个链表。'''# -*- coding:utf-8 -*-# class RandomListNo原创 2020-06-03 23:38:04 · 101 阅读 · 0 评论 -
剑指offer - 题23~24(二叉树,后序遍历,深度优先搜索(DFS),二叉搜索树)
二叉搜索树的后序遍历序列输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。# -*- coding:utf-8 -*-class Solution: def VerifySquenceOfBST(self, sequence): # write code here ''' 二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者原创 2020-06-02 23:49:27 · 97 阅读 · 0 评论 -
剑指offer - 题20~22(栈、队列、二叉树)
包含min函数的栈定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。# -*- coding:utf-8 -*-class Solution: def __init__(self): self.stack = [] self.assist = [] def push(self, node): # w原创 2020-06-01 23:41:30 · 86 阅读 · 0 评论 -
剑指offer - 题16~19(合并链表,递归,二叉树子树、镜像,矩阵顺时针打印)
合并两个排序的链表输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # 返回合并后列表 def Merge(self, pHead1, pHead2): # write原创 2020-05-31 23:40:24 · 111 阅读 · 0 评论 -
剑指offer - 题15(反转链表)
反转链表输入一个链表,反转链表后,输出新链表的表头。# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # 返回ListNode def ReverseList(self, pHead): # write code here if not原创 2020-05-30 00:03:23 · 101 阅读 · 0 评论 -
剑指offer - 题12~14(快速幂算法、二进制位运算、数组排序,链表双指针)
数值的整数次方给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0# -*- coding:utf-8 -*-class Solution: def Power(self, base, exponent): # write code here # 常规思路,关键在于条件判断 if base ==0: return 0原创 2020-05-28 23:39:02 · 97 阅读 · 0 评论 -
剑指offer - 题5~11(栈&队列、旋转数组、斐波那契数列、跳台阶、矩形覆盖方法、二进制补码)
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。# -*- coding:utf-8 -*-class Solution: def __init__(self): # 栈A存储新来的元素,栈B用作出队列操作,不为空时直接pop,为空时要将栈A中所有元素push到栈B中进行pop操作 self.stackA=[] self.stackB=[] def push(self, node): #原创 2020-05-25 23:47:13 · 194 阅读 · 1 评论 -
剑指offer - 题3、4(链表递归、二叉树三种遍历递归)
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # 返回从尾部到头部的列表值序列,例如[1,2,3] def printListFromTailToHead(self, listNode):原创 2020-05-24 23:49:21 · 147 阅读 · 1 评论 -
剑指offer - 题1、2(数值有序查找、字符替换)
01 题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。# -*- coding:utf-8 -*-class Solution: # array 二维列表 def Find(self, target, array): # write code here # 关键思路在于从左下角开始查找,这样保证指针路线是原创 2020-05-24 00:00:28 · 136 阅读 · 1 评论