剑指offer
语亦情非
进步是留给时间最好的礼物
展开
-
剑指offer34:二叉树中和为某一值的路径
题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。class TreeNode: def __init__(self,x): self.val=x self.left=None self.right=Noneclass Solut...原创 2020-02-28 23:45:53 · 175 阅读 · 0 评论 -
剑指offer33:验证二叉搜索树
class Solution: def verifySquenceOfBST(self,sequence): n=len(sequence) if not sequence: return False if n<=2: return True for i in rang...原创 2020-02-28 15:52:07 · 101 阅读 · 0 评论 -
剑指offer32:从上到下打印二叉树
广度优先搜索class TreeNode: def __init__(self,x): self.value=x self.left=None self.right=None#方法1:用队列实现广度优先遍历class Solution: def levelOrder(self,root): if not ...原创 2020-02-27 18:19:03 · 125 阅读 · 0 评论 -
剑指offer31:栈的压入、弹出序列
def isPopOrder(ppush,ppop): # ppush 压入序列 # ppop 弹出序列 stack=[] for i in ppush:# for j in ppush: stack.append(i) while stack and stack[-1]==ppop[0]: ...原创 2020-02-27 16:35:08 · 111 阅读 · 0 评论 -
剑指offer30:包含min函数的栈
class Stack(object): def __init__(self): self.items=[] self.min_s=[] def push(self,item): self.items.append(item) if not self.min_s or self.min_s[-1]>=item:...原创 2020-02-27 12:23:05 · 92 阅读 · 0 评论 -
剑指offer29:顺时针打印矩阵
def printMatrix(atr,rows,cols): start=0 while cols>start*2 and rows >start*2: printMatrixCircle(atr,cols,rows,start) start+=1def printMatrixCircle(atr,cols,rows,start):...原创 2020-02-26 19:59:34 · 95 阅读 · 0 评论 -
剑指offer21:调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。#方法1:时间复杂度o(n) 空间复杂度o(n)def oddevenorder(alist): if not alist: return None if len(alist)==1: return alist odd...原创 2020-02-26 16:02:11 · 147 阅读 · 0 评论 -
剑指offer51:数组中的逆序对
#方法1:暴力法 0(n**2)def InversePairs(data): count=0 for i in range(len(data)): for j in range(i,len(data)): if data[i]>data[j]: count += 1 r...原创 2020-02-25 19:02:25 · 183 阅读 · 1 评论 -
剑指offer相关题目3:两个单词互为变位词:
题目:两个单词出现的字母相同,每个字母出现的次数也相同,那么两个单词互为变位词def anagram(str1,str2): dict={} for i in str1: if i in dict: dict[i]+=1 else: dict[i]=1 for i in str2: ...原创 2020-02-24 20:06:54 · 255 阅读 · 0 评论 -
剑指offer相关题目2:删除字符串中所有重复出现的字符 0(n)
#相关题目2:删除字符串中所有重复出现的字符 0(n)def deleteRepeatStr(str): dict={} for i in str: if i in dict: dict[i]+=1 else: dict[i]=1 print(dict) res=[] for...原创 2020-02-24 20:04:30 · 184 阅读 · 0 评论 -
剑指offer相关题目1:从第一个字符串中删除在第二个字符串中出现过的所有字符o(n)
#相关题目1:从第一个字符串中删除在第二个字符串中出现过的所有字符o(n)def Str1DeleteStr2(str1,str2): dict={} for i in str2: if i in dict: dict[i]+=1 else: dict[i]=1 re=[] for ...原创 2020-02-24 20:03:38 · 299 阅读 · 0 评论 -
剑指offer50-1:字符串中第一个只出现一次的字符
题目:在字符串中找出第一个只出现一次的字符。如输入"abaccdeff",则输出'b'。#方法1:两次for循环def firstchar(str): for i in range(len(str)): count=0 for j in range(len(str)): if str[i]==str[j]: ...原创 2020-02-24 20:01:30 · 93 阅读 · 0 评论 -
offer50-2:字符流中第一个只出现一次的字符
找出字符流中第一个只出现一次的字符。例如,当从字符流google中只读出前两个字符go时,第一个只出现一次的字符是g;当读完google时,第一个只出现一次的字符是l。class Solution(): def __init__(self): #s存储读入字符流的字符 self.s=[] #count存储字符出现的次数 ...原创 2020-02-24 19:55:43 · 85 阅读 · 0 评论 -
剑指offer49:丑数
题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。#方法1:暴力直观方法def isugly(number): while number%2==0: number/=2 while number%3==0: ...原创 2020-02-24 02:20:07 · 115 阅读 · 0 评论 -
剑指offer48:最长不含重复字符的子字符串
输入一个字符串(只包含 a~z 的字符),求其最长不含重复字符的子字符串的长度。例如对于 arabcacfr,最长不含重复字符的子字符串为 acfr,长度为 4。# 方法1:暴力法#判断一个字符串是否重复def repeatstring(str): for i in range(len(str)-1): for j in range(i+1,len(str)):...原创 2020-02-23 19:34:25 · 158 阅读 · 0 评论 -
剑指offer47:礼物的最大价值
题目描述:在一个m*n的棋盘的每一格都放一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向左或向下移动一格,直到到达棋盘的右下角。给定一个棋盘及其上边的礼物,请计算你最多能拿多少价值的礼物。#方法1:建立二维数组,动态规划法def getMaxValue(values,rows,cols): #values 是一维数组 if...原创 2020-02-23 01:14:43 · 127 阅读 · 0 评论 -
剑指offer46:把数字翻译成字符串
题目描述:给定一个数字,按照如下规则翻译成字符串:0翻译成"a",1翻译成"b"......25翻译成”z"。一个数字可能有多个翻译。如12258有5种不同def GetTranslationCount(number): if number<0: return 0 strnumber=str(number) length=len(strnumbe...原创 2020-02-18 23:45:43 · 77 阅读 · 0 评论 -
剑指offer44:数字序列中某一位的数字
题目描述:在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …中找到第 n 个数字。#方法1:直观方法,每枚举一个数字的时候,求出该数字是几位数,并把该数字的位数和前面所有数字的位数累加,#如果位数之和《n,则继续枚举下一个数字,当累加的位数》=n,那第n位数字一定在这个数字里,我们再从该数字中找出对应的那一位。#求正正数的位数def coun...原创 2020-02-18 15:17:13 · 186 阅读 · 0 评论 -
剑指offer42:连续子数组的最大和
#方法1: 枚举所有子数组,求最大值O(n**2)def FindGreatSumOfSubArray(array): n=len(array) sm=[] for i in range(n-1): for j in range(i+1,n): sm.append(sum(array[i:j])) return max(s...原创 2020-02-17 21:45:51 · 150 阅读 · 1 评论 -
剑指offer40:最小的k个数
问题描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。#方法1:O(nlogn)def GetLeastNumbers(input,k):# input.sort()# return input[:4] a=sorted(input) input=[4,5,1,6,2,7...原创 2020-02-17 14:45:25 · 85 阅读 · 0 评论 -
剑指offer59:队列的最大值
题目1:滑动窗口的最大值#方法1:暴力法+双指针def maxInWindows(num, size): if not num: return None if size==1: return num if size>len(num): return max(num) left=0 right=2...原创 2020-02-12 23:00:20 · 114 阅读 · 0 评论 -
剑指offer58:翻转字符串
题目1:翻转单词顺序# 剑指offer58:翻转字符串# 题目1:翻转单词顺序#方法1:调用python内部split函数和切片def ReverseSentence(s): str=s.split(' ') return ' '.join(str[::-1]) s='I am a student.'ReverseSentence(s)#方法2:...原创 2020-02-12 14:57:32 · 118 阅读 · 0 评论 -
剑指offer57:和为s的数字
题目1:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。#方法1:暴力法O(n)def FindNumbersWithSum(data,sum): result=[] for i in range(len(data)): for j in range(i,len(da...原创 2020-02-12 10:41:20 · 77 阅读 · 0 评论 -
剑指offer53:在排序数组中查找数字
题目1:数字在排序数组中出现的次数统计一个数字在排序数组中出现的次数# #方法1:count# def GetNumberOfK(data,k):# if not data or len(data)==0:# return 0# return data.count(k)# data=[1,2,3,3,3,3,4,5]# GetNumberO...原创 2020-02-09 00:01:00 · 179 阅读 · 0 评论 -
剑指offer39:数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5def FindNumsAppearOnce(array):# result={}# re=[]# count=1# for i in range(len(array)):# if ...原创 2020-02-07 11:25:16 · 164 阅读 · 0 评论 -
剑指offer67:数组中只出现一次的数字
题目描述一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。def FindNumsAppearOnce(array): result={} count=1 for i in range(len(array)): if array[i] in result: result[array[...原创 2020-02-06 23:49:22 · 81 阅读 · 0 评论 -
剑指offer18:删除链表节点¶
def deleteNode(head_node,del_node): #如果头节点为空,或要删除节点为空 if not head_node or not del_node: return False #要删除的不是尾节点 if del_node.next_node !=None: del_next_node=del_node.ne...原创 2020-02-06 22:59:04 · 296 阅读 · 0 评论 -
剑指offer17:打印从1到最大的n位数
def print2MaxofNDigits(n): if n<=0: return num=['0']*n for i in range(10): num[0]=str(i) recursive(num,n,0) print(num)#递归出数字排列def recursive(number,lengt...原创 2020-02-06 09:47:22 · 169 阅读 · 0 评论 -
剑指offer16:数值的整数次方
def Power(base,exponent): def powerunsignedexponent(base,exponent): result=1 for i in range(exponent): result *=base return result if base==0 and exponent&...原创 2020-02-05 15:47:09 · 120 阅读 · 0 评论 -
剑指offer14:剪绳子
题目: 给你一根长度为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。思路:动态规划首先定义函数f(n)为把长度为n的绳子剪成若干段后各段长度乘积的最大值...原创 2020-02-05 11:54:35 · 85 阅读 · 0 评论 -
剑指offer9:用两个栈实现队列
、使用两个栈,一个栈(stackPush)用于元素进栈,一个栈(stackPop)用于元素出栈;2、pop() 或者 peek() 的时候:(1)如果 stackPop 里面有元素,直接从 stackPop 里弹出或者 peek 元素;(2)如果 stackPop 里面没有元素,一次性将 stackPush 里面的所有元素倒入 stackPop。为此,可以写一个 shift 辅助方...原创 2020-01-19 02:15:23 · 100 阅读 · 0 评论 -
剑指offer8:二叉树的下一个节点
# -*- coding:utf-8 -*-# class TreeLinkNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = None# self.next = Noneclass Solution: ...原创 2020-01-17 19:02:22 · 208 阅读 · 0 评论 -
剑指offer7:重建二叉树
# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: # 返回构造的TreeNode根节点 def reCo...原创 2020-01-17 11:48:36 · 107 阅读 · 0 评论 -
剑指offer5:这里复习反转链表
class Solution(object): def reverseList(self, head): """ :type head: ListNode :rtype: ListNode """ # 递归终止条件是当前为空,或者下一个节点为空 if(head==None or head.ne...原创 2020-01-16 22:33:23 · 112 阅读 · 0 评论 -
剑指offer6:从尾到头打印链表
def printListFromTailToHead(listNode): res=[] while listNode: res.append(listNode.val) listNode=listNode.next return res[::-1]原创 2020-01-16 22:32:01 · 95 阅读 · 0 评论 -
剑指offer3:数组中重复的数字
#方法1:直接排序后,找到重复的 时间复杂度 o(nlogn)li=[2,8,4,6,9,1,3,2]l1=sorted(li)for i in range(len(l1)-1): if l1[i]==l1[i+1]: print(l1[i])#方法2:hash 表#方法2:hash 表li=[2,8,4,6,9,1,3,2]def repeat(li):...原创 2020-01-16 14:03:53 · 110 阅读 · 0 评论 -
剑指offer5: 替换空格
2替换空格2.1 题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。2.2 解题思路replace 遍历字符串,然后遇到空格就替换成“%20”2.3 代码方法1:s="hello word"s1=s.replace(' ','%20')print(s1...原创 2019-08-04 16:15:38 · 137 阅读 · 0 评论 -
剑指offer4:二维数组中的查找
1 二维数组中的查找1.1 题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。1.2 解题思路按行开始遍历,假设target大于第一行的最后一个数,那么我们就在第二行查找;如果target小于一行的最后一个数,那么我们检查下倒数...原创 2019-08-04 15:53:27 · 90 阅读 · 0 评论