剑指Offer(牛客版)
汤姆鱼
微信公众号「汤姆鱼」
展开
-
剑指Offer(牛客版)--面试题60 :扑克牌中的顺子
题目描述:LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为1...原创 2019-07-26 17:04:54 · 171 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题60 :扑克牌中的顺子
题目描述:LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,...原创 2019-12-21 22:24:29 · 113 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题48: 最长不含重复字符的子字符串
题目描述:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含从’a’到’z’的字符。分析:完整代码://输入数组的 string 常引用,输出满足条件的子字符串长度int longestSubstringWithoutDuplication(const string& str){ //声明一...原创 2019-07-10 13:12:27 · 628 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题47:礼物的最大价值
题目描述:在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向左或者向下移动一格直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物?分析:完整代码://给出礼物矩阵,求矩阵中能获取的礼物最大值int getMaxValues_solution(c...原创 2019-07-10 13:04:19 · 495 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题46:把数字翻译成字符串
问题描述:给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成”a”,1翻译成”b”,……,11翻译成”l”,……,25翻译成”z”。一个数字可能有多个翻译。例如12258有5种不同的翻译,它们分别是”bccfi”、”bwfi”、”bczi”、”mcfi”和”mzi”。请编程实现一个函数用来计算一个数字有多少种不同的翻译方法。分析:完整代码://给出...原创 2019-07-10 12:54:54 · 301 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题45:把数组排成最小的数
题目描述:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3, 32, 321},则打印出这3个数字能排成的最小数字321323。分析:完整代码:class Solution {public: string PrintMinNumber(vector<int> number...原创 2019-07-10 12:51:36 · 189 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题44: 数字序列中的某一位数
题目描述:数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数求任意位对应的数字。分析:完整代码:int digitAtIndex(int index){ //检查输入的合法性 if(n < 0) return -1; ...原创 2019-07-10 12:48:50 · 160 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题43: 1~n 整数中 1 出现的次数
题目描述:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。完整代码:class Solution {public: int NumberOf1Between1AndN_Solution(int n) { //检查输入的合法...原创 2019-07-10 12:45:43 · 114 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题53: 数字在排序数组中出现的次数
题目描述:统计一个数字在排序数组中出现的次数。例如输入排序数组{1, 2, 3, 3, 3, 3, 4, 5}和数字3,由于3在这个数组中出现了4次,因此输出4。分析:整体思路:求第一个 K和最后一个 K 的下标:完整代码:class Solution {public: int GetNumberOfK(vector<i...原创 2019-07-14 17:33:07 · 144 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题52: 两个链表的第一个公共节点
题目描述:输入两个链表,找出它们的第一个公共结点。分析:完整代码:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ...原创 2019-07-12 22:20:04 · 119 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题41: 数据流中的中位数
题目描述:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。分析:完整代码:class Solution {public: void Insert(int num) { //如果数据流中读出的...原创 2019-06-27 22:22:07 · 126 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题39: 数组中出现的次数超过一半的数字
题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, 4, 2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。分析:1、分析判断输入数组的合法性;2、寻找出现次数超过数组长度一半的数字;3、检查寻找的数字是否超过数组长度的一半;完整代码:class ...原创 2019-06-24 12:19:14 · 138 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题40: 最小的K个数
题目描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4.分析:完整代码:class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { ...原创 2019-06-26 21:40:31 · 179 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题42: 连续子数组的最大和
题目描述:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连...原创 2019-07-01 23:00:08 · 146 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题38:字符串的排列
题目描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。分析:第一步:把第一个字符和后面的所有字符交换;第二步:固定一个字符,求后面的字符的排列;完整代码:class Solution {public: vector<...原创 2019-06-22 17:22:50 · 131 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题34:二叉树中和为某一值的路径
题目描述:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。分析:完整代码:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val...原创 2019-06-12 10:49:20 · 177 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题37: 序列化二叉树
题目描述:请实现两个函数,分别用来序列化和反序列化二叉树。分析:序列化:也叫持久化,显然序列化需要将每个结点按照一定的顺序转换为字符串即可;反序列化:根据一个字符串重新建立一棵二叉树,反序列化是序列化的逆过程,对于一个字符串,首先按照分隔符',',将其分割为字符串数组,每个字符串元素代表一个结点,然后开始重建二叉树。由于每个结点再字符串中只保留了一个val值,因此需要根...原创 2019-06-21 11:05:05 · 264 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题49: 丑数
题目描述:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做第一个丑数。分析:完整代码:class Solution {public: int GetUglyNumber_Solution(int index) { ...原创 2019-07-10 13:16:13 · 145 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题50: 第一个只出现一次的字符
题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)分析:完整代码:class Solution {public: int FirstNotRepeatingChar(string str) { //声明一个变量,...原创 2019-07-11 12:59:35 · 120 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题55(2):二叉树平衡树
题目描述:输入一棵二叉树,判断该二叉树是否是平衡二叉树。分析:完整代码:class Solution {public: bool IsBalanced_Solution(TreeNode* pRoot) { //声明一个变量,表示高度 int pDepth = 0; //调用函数判断是否为平衡子树 ...原创 2019-07-18 09:18:27 · 125 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题64 :构建乘积数组
题目描述:给定一个数组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]。不能使用除法。分析:完整代码:class Solution {public: vector<int> multiply(const vecto...原创 2019-08-02 13:29:37 · 139 阅读 · 0 评论 -
面试题66 字符串中第一个不重复的字符
题目描述:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。完整代码:class Solution{public: //Insert one char from stringstream void ...原创 2019-08-05 12:59:12 · 546 阅读 · 0 评论 -
面试题65 把字符串转换成整数
题目描述:请你写一个函数StrToInt,实现把字符串转换成整数这个功能。当然,不能使用atoi或者其他类似的库函数。完整代码:class Solution {public: enum Status{kValid = 0,kInvalid}; int g_nStatus = kValid; int StrToInt(string str) { ...原创 2019-08-04 17:25:41 · 213 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题58(1) 翻转单词顺序
题目描述:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。分析:完整代码:class Solution {public: string ReverseSentence(string str) { ...原创 2019-07-22 19:04:54 · 134 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题63 :不用加减乘除做加法
题目描述:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、×、÷四则运算符号。分析:加法本质是先各位相加不考虑进位,再把进位和前一步结果各位相加,如此反复直到不产生进位。完整代码:class Solution {public: int Add(int num1, int num2) { do { ...原创 2019-07-31 16:21:43 · 120 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题62 :求 1+2+3+…+n
题目描述:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。分析:创建对象数组即可多次调用构造函数,在调用时操作静态成员。完整代码:class Solution {public: int Sum_Solution(int n) { //声明一个变量,表...原创 2019-07-31 16:18:53 · 137 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题61 :圆圈中最后剩下的数字
题目描述:0, 1, …, n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数.完整代码:class Solution {public: int LastRemaining_Solution(int n, int m) { //检查输入的合法性 if(n < 1 |...原创 2019-07-30 22:26:47 · 88 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题59 :滑动窗口的最大值
题目描述:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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]...原创 2019-07-25 12:23:00 · 133 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题57(2): 和为 s 的连续正整数序列
题目描述:输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~5、4~6和7~8。分析:完整代码:class Solution {public: vector<vector<int> > FindContinuou...原创 2019-07-20 19:44:49 · 159 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题57(1):和为 s 的数字
题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。分析:完整代码:class Solution {public: vector<int> FindNumbersWithSum(vector<int> array,int sum) { ...原创 2019-07-19 22:14:32 · 101 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题56:数组中只出现一次的数字
题目描述:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。分析:完整代码:class Solution {public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { //声明一个变量表示当前...原创 2019-07-19 16:33:04 · 142 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题58(2) :左旋转字符串
题目描述:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!完整代码:class Solution {public: stri...原创 2019-07-24 10:01:27 · 96 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题55(1):二叉树的深度
题目描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度分析:完整代码:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(...原创 2019-07-16 17:09:48 · 134 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题51: 数组中的逆序对
题目描述:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。分析:完整代码:class Solution {public: int InversePairs(vector<int> data) { //检查输入的合法性 if(data.empty...原创 2019-07-12 12:35:22 · 147 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题54: 二叉搜索树的第k个结点
题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。分析:完整代码:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(...原创 2019-07-15 22:29:07 · 132 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题32-1:从上到下打印二叉树
题目描述:从上往下打印出二叉树的每个节点,同层节点从左至右打印。分析:完整代码:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }...原创 2019-06-04 21:12:49 · 134 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题33:二叉树的后序遍历序列
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。分析:完整代码:class Solution {public: bool VerifySquenceOfBST(vector<int> sequence) { //判断输...原创 2019-06-10 18:23:02 · 240 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题31:栈的压入、弹出序列
题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)分析:完整代码:class Solu...原创 2019-06-04 14:20:55 · 121 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题22:链表中倒数第K个节点
题目描述:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。完整代码:/*struct ListNode { int val; struct ListNode *next; Lis...原创 2019-05-24 14:23:39 · 121 阅读 · 0 评论 -
剑指Offer(牛客版)--面试题14:剪绳子
题目:给你一根长度为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。1、动态规划(完整代码):/***************动态规划算法************...原创 2019-05-10 22:47:30 · 550 阅读 · 0 评论