剑指
KazeHelloWorld
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 68. 二叉搜索树的最近公共祖先
剑指 Offer 68. 二叉搜索树/一般树的最近公共祖先二叉搜索树的最近公共祖先# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def lowestCommonAncestor(self,原创 2021-05-17 16:31:29 · 63 阅读 · 0 评论 -
剑指 Offer 63. 股票的最大利润
剑指 Offer 63. 股票的最大利润假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?class Solution: def maxProfit(self, prices: List[int]) -> int: dp = 0 cost = float('+inf') for p in prices: cost = min(cost, p) dp =原创 2021-05-14 16:05:44 · 61 阅读 · 0 评论 -
剑指 Offer 60. n个骰子的点数
剑指 Offer 60. n个骰子的点数题目描述把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。class Solution: def dicesProbability(self, n: int) -> List[float]: L = [[0]* 6 * n for _ in range(n + 1)]原创 2021-05-13 20:07:26 · 47 阅读 · 0 评论 -
剑指 Offer 59 - II. 队列的最大值
剑指 Offer 59 - II. 队列的最大值题目描述请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。若队列为空,pop_front 和 max_value 需要返回 -1类似:JZ64 剑指offer 滑动窗口的最大值class MaxQueue: def __init__(self): self.dq = collections.deque()原创 2021-05-13 15:14:12 · 67 阅读 · 0 评论 -
剑指 Offer 47. 礼物的最大价值
剑指 Offer 47. 礼物的最大价值题目描述在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?动态规划:中间每个位置由上面和左边的最大值决定class Solution: def maxValue(self, grid: List[List[int]]) -> int: f原创 2021-04-24 14:24:07 · 66 阅读 · 0 评论 -
剑指 Offer 46. 把数字翻译成字符串
剑指 Offer 46. 把数字翻译成字符串题目描述给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法动态规划:class Solution: def translateNum(self, num: int) -> int: s = str(num) # a = f[0], b原创 2021-04-23 16:49:00 · 62 阅读 · 0 评论 -
剑指 Offer 45. 把数组排成最小的数
剑指 Offer 45. 把数组排成最小的数题目描述输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。import functoolsclass Solution: def minNumber(self, nums: List[int]) -> str: def compare(x, y): a, b = x + y, y + x if a > b: return 1原创 2021-04-23 16:14:25 · 51 阅读 · 0 评论 -
剑指 Offer 44. 数字序列中某一位的数字
剑指 Offer 44. 数字序列中某一位的数字题目描述数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。思路:n - 1,除掉首位的0,一位的有9个,两位的有90个。。。以此类推。cnt 用于存储这些,cnt x digit 表示这些数占用的位置数,比如 897,n最后把前面的0到99都踢掉了,起始位置为100,digit为3,然后定位,得到最终原创 2021-04-23 14:47:03 · 52 阅读 · 0 评论 -
剑指 Offer 41. 数据流中的中位数
剑指 Offer 41. 数据流中的中位数题目描述from heapq import *class MedianFinder: def __init__(self): """ initialize your data structure here. """ self.Bigger = [] # 小顶堆,保存较大的一半 self.Smaller = [] # 大顶堆,保存较小的一半 def addNum原创 2021-04-22 22:16:00 · 48 阅读 · 0 评论 -
剑指 Offer 40. 最小的k个数
剑指 Offer 40. 最小的k个数题目描述输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。快排:class Solution: def getLeastNumbers(self, arr: List[int], k: int) -> List[int]: def quick_sort(arr, l, r): # 子数组长度为 1 时终止递归原创 2021-04-22 22:07:30 · 46 阅读 · 0 评论 -
剑指 Offer 33. 二叉搜索树的后序遍历序列
剑指 Offer 33. 二叉搜索树的后序遍历序列题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。递归:class Solution: def verifyPostorder(self, postorder: List[int]) -> bool: def istrue(begin,end): if begin >= end:原创 2021-04-19 16:08:08 · 113 阅读 · 1 评论 -
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
调整数组顺序使奇数位于偶数前面题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分首尾指针法class Solution: def exchange(self, nums: List[int]) -> List[int]: left, right = 0, len(nums) - 1 while left < right: if nums[left] %原创 2021-04-14 13:56:57 · 61 阅读 · 0 评论 -
JZ20 表示数值的字符串 LeetCode
表示数值的字符串题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。class Solution: def isNumber(self, s: str) -> bool: states = [ { ' ': 0, 's': 1, 'd':原创 2021-04-14 00:50:21 · 125 阅读 · 0 评论 -
JZ19 正则表达式匹配 LeetCode
正则表达式匹配题目描述请实现一个函数用来匹配包含’. ‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但与"aa.a"和"ab*a"均不匹配。class Solution: def isMatch(self, s: str, p: str) -> bool: m, n = len(s) + 1, len(p)原创 2021-04-13 13:55:39 · 152 阅读 · 0 评论 -
JZ17 打印从1到最大的n位数 LeetCode
打印从1到最大的n位数题目描述输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999class Solution: def printNumbers(self, n: int) -> List[int]: ret = [] def dfs(x): if x == n: num = ''.join(nums[self.start:]原创 2021-04-13 00:24:29 · 83 阅读 · 0 评论 -
JZ67 剑指offer 剪绳子
第67题 剪绳子题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],…,k[m]。请问k[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。思路:动态规划class Solution {public: int cutRope(int number) { if(number == 2) retur原创 2021-03-29 22:51:03 · 71 阅读 · 0 评论 -
JZ66 剑指offer 机器人的运动范围
第66题 机器人的运动范围题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?class Solution {public: int dir[5] = {-1, 0, 1, 0, -1};原创 2021-03-29 22:35:29 · 125 阅读 · 0 评论 -
JZ65 剑指offer 矩阵中的路径
第65题 矩阵中的路径题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 [abcesfcsadee]\begin{bmatrix} a & b & c &e \\ s & f & c & s \\ a & d & e& e\\ \end{b原创 2021-03-29 20:44:38 · 86 阅读 · 0 评论 -
JZ64 剑指offer 滑动窗口的最大值
第64题 滑动窗口的最大值题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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]原创 2021-03-09 22:10:02 · 92 阅读 · 0 评论 -
JZ63 剑指offer 数据流中的中位数
第63题 数据流中的中位数题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。class Solution {public: priority_queue<int,vector<int>,less<int>> min_q;原创 2021-03-09 16:38:35 · 72 阅读 · 0 评论 -
JZ62 剑指offer 二叉搜索树的第k个结点
第62题 二叉搜索树的第k个结点题目描述给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: int原创 2021-03-08 14:16:46 · 102 阅读 · 0 评论 -
JZ59 剑指offer 按之字形顺序打印二叉树
第59题 按之字形顺序打印二叉树题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {原创 2021-02-08 15:34:13 · 75 阅读 · 0 评论 -
JZ58 剑指offer 对称的二叉树
第58题 对称的二叉树题目描述请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution原创 2021-02-08 11:19:02 · 82 阅读 · 0 评论 -
JZ57 剑指offer 二叉树的下一个结点
第57题 二叉树的下一个结点题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。/*struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct TreeLinkNode *next; TreeLinkNode(int x) :val(x), lef原创 2021-02-08 10:45:21 · 91 阅读 · 0 评论 -
JZ56 剑指offer 删除链表中重复的结点
第56题 删除链表中重复的结点题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/原创 2021-02-07 14:05:38 · 63 阅读 · 0 评论 -
JZ54 剑指offer 字符流中第一个不重复的字符
第54题 字符流中第一个不重复的字符题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。class Solution{public: //Insert one char from stringstream unordered_map<char,int> m; queue<char> q;原创 2021-02-05 10:22:44 · 80 阅读 · 0 评论 -
JZ51 剑指offer 构建乘积数组
第51题 构建乘积数组题目描述给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。class Solution {public: vector<int原创 2021-02-03 15:56:33 · 63 阅读 · 0 评论 -
JZ50 剑指offer 数组中重复的数字
第50题 数组中重复的数字题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中第一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。返回描述:如果数组中有重复的数字,函数返回true,否则返回false。如果数组中有重复的数字,把重复的数字放到参数duplication[0]中。(ps:duplication已经初始化,可以直接赋值使原创 2021-01-28 15:20:17 · 66 阅读 · 0 评论 -
JZ49 剑指offer 把字符串转换成整数
第49题 把字符串转换成整数题目描述将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0class Solution {public: int StrToInt(string str) { const int length = str.length(); int isNegtive = 1, overValue = 0; int digit = 0, value = 0;原创 2021-01-28 15:02:13 · 71 阅读 · 0 评论 -
JZ48 剑指offer 不用加减乘除做加法
第48题 不用加减乘除做加法题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。class Solution {public: int Add(int num1, int num2) { while(num2 != 0){ int c = ((unsigned int)(num1 & num2)) << 1; num1 ^= num2; num原创 2021-01-28 14:44:04 · 75 阅读 · 0 评论 -
JZ47 剑指offer 求1+2+3+...+n
第47题 求1+2+3+…+n题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。class Solution {public: int Sum_Solution(int n) { bool x = n>1 && (n += Sum_Solution(n-1)); return n; }};...原创 2021-01-26 20:39:57 · 116 阅读 · 1 评论 -
JZ46 剑指offer 孩子们的游戏(圆圈中最后剩下的数)
第46题 孩子们的游戏(圆圈中最后剩下的数)题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名原创 2021-01-26 20:20:46 · 98 阅读 · 0 评论 -
JZ45 剑指offer 扑克牌顺子
第45题 扑克牌顺子题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决原创 2021-01-25 15:37:47 · 71 阅读 · 0 评论 -
JZ44 剑指offer 翻转单词顺序列
第44题 翻转单词顺序列题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?使用库函数stringstreamclass Solution {public: string R原创 2021-01-22 10:09:37 · 101 阅读 · 0 评论 -
JZ43 剑指offer 左旋转字符串
第43题 左旋转字符串题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!class Solution {public: string LeftRotateString(string str, int n) { if(n>str原创 2021-01-22 09:38:08 · 108 阅读 · 0 评论 -
JZ35 剑指offer 数组中的逆序对
第35题 数组中的逆序对题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007class Solution {public: const int kmod = 1000000007; int InversePairs(vector<int> data) { int ret=0; vect原创 2021-01-21 20:27:27 · 100 阅读 · 0 评论 -
JZ42 剑指offer 和为S的两个数字
第42题 和为S的两个数字题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。class Solution {public: vector<int> FindNumbersWithSum(vector<int> array,int sum) { if(array.empty()) return {}; pair<int,int> ret;原创 2021-01-19 16:41:51 · 78 阅读 · 0 评论 -
JZ41 剑指offer 和为S的连续正数序列
第41题 和为S的连续正数序列题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!class Solution {public: vector<vector<int> >原创 2021-01-19 16:36:46 · 84 阅读 · 0 评论 -
JZ40 剑指offer 数组中只出现一次的数字
第40题 数组中只出现一次的数字题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。class Solution {public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { int ret =0 ; for(const int k : data){ ret ^= k; }原创 2021-01-19 15:53:39 · 76 阅读 · 0 评论 -
JZ39 剑指offer 平衡二叉树
第39题 平衡二叉树题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。class Solution {public: bool IsBalanced_Solution(TreeNode* pRoot) { return depth(pRoot) !=原创 2021-01-19 12:01:23 · 56 阅读 · 0 评论