剑指offer
五山口老法师
腾讯后台开发工程师
展开
-
华为:N个同学站成一排,发饼干至少每人一个,相邻分值高的可以多分一个以上饼干,求问至少需要发多少个饼干满足要求
N个同学站成一排,发饼干至少每人一个,相邻分值高的可以多分一个以上饼干,求问至少需要发多少个饼干满足要求华为面试被问手撕这道题。输入分值:【1,2,3】输出:5解析:3+1+1 = 5。但是要考虑到 输入分值:【3,4,3】输出:4解析:3+1。4只需要算一次就行。解答思路:new两个数组,两趟遍历,左向右遍历,再右向左遍历,分别比较,最后比较两个数...原创 2019-10-14 12:47:19 · 466 阅读 · 1 评论 -
动态规划:连续子数组的最大和
解答过程:使用动态规划F(i):以array[i]为末尾元素的子数组的和的最大值,子数组的元素的相对位置不变F(i)=max(F(i-1)+array[i] , array[i])res:所有子数组的和的最大值res=max(res,F(i))如数组[6, -3, -2, 7, -15, 1, 2, 2]初始状态:F(0)=6res=6...原创 2019-03-26 17:17:27 · 252 阅读 · 0 评论 -
深信服:输入一个字符串,帮忙统计字符串里面的每个单词出现的次数,以及非法单词的次数。非法单词的定义为:包含数字(0-9)的单词
深信服2018秋招笔试题:输入一个字符串,帮忙统计字符串里面的每个单词出现的次数,以及非法单词的次数。非法单词的定义为:包含数字(0-9)的单词输入一个字符串,长度小于1000,输入的字符仅包含(0-9,a-z,A-Z, . , : ! )及空格。输出按单词的字母进行排序,每行为 :单词 单词出现次数最后一行输出非法单词个数实例1:输入:wow! Is won...原创 2018-09-22 09:47:56 · 2398 阅读 · 0 评论 -
剑指offer:约瑟夫环的问题
什么是约瑟夫环问题?约瑟夫问题是个著名的问题:N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。例如只有三个人,把他们叫做A、B、C,他们围成一圈,从A开始报数,假设报2的人被杀掉。首先A开始报数,他报1。侥幸逃过一劫。 然后轮到B报数,他报2。非常惨,他被杀了 C接着从1开始报数 接着轮到A报数,他报2。也被杀死...原创 2018-09-21 14:38:51 · 677 阅读 · 0 评论 -
华为:给定一段英文,长度在100000个字符以内。要求统计出这段文章中,出现最多的英文字母。
华为2018秋招笔试题:给定一段英文,长度在100000个字符以内。要求统计出这段文章中,出现最多的英文字母(不理会除英文字母之外的字符,大小写算作同一个字母),以及其出现的次数。本段文章不包含回车换行。如果两个或多个字母出现的次数一样多,那么仅输出排在最前面的一个字母和出现的次数。1)大小写算作同一个字母:a-z ==> 97-122A-Z ==> 65-90...原创 2018-09-26 21:32:13 · 1177 阅读 · 0 评论 -
平安科技:传入一个只包含1-9的数字字符串,输出的是包含所有数字的最小整数
平安科技秋招笔试题:传入一个只包含1-9的数字字符串,输出的是包含所有数字的最小整数。比如:输入“1992212”,输出129。实例:输入1992212输出129思路:使用关联容器,提取数字。将数字存入vector,再使用剑指offer上的思路,排列组合打印最小数字!#include<iostream>#include<string>#...原创 2018-10-11 10:41:22 · 1635 阅读 · 1 评论 -
剑指offer:给定一个数组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]
给定一个数组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]。不能使用除法(元素可能为0,除以0操作未定义)思路:B[i]的值可以看作下图的矩阵中每行的乘积。下三角用连乘可以很容求得,上三角,从下向上也是连乘。因此我们的思路就很清晰了,先算下三角...原创 2018-09-20 09:57:07 · 1330 阅读 · 0 评论 -
剑指offer:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
问题:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。通俗易懂的解释:首先从丑数的定义我们知道,一个丑数的因子只有2,3,5,那么丑数p = 2 ^ x * 3 ^ y * 5 ^ z,换句话说一个丑数一定由另一个丑数乘以2或者乘以3或者乘以5得到,那么我们...原创 2018-09-14 17:01:46 · 4541 阅读 · 1 评论 -
剑指offer:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5看这图体会一下/*struct ListNode { int val; struct ListNode *next; ListNode(...原创 2018-09-13 22:01:58 · 477 阅读 · 0 评论 -
剑指offer:数组中重复的数字
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。看到这一题,有两个思路!1)是否求任意一个重复的数字?2)是否求第一个重复的数字?对于1)很简单,使用map就可以搞定...原创 2018-09-19 09:09:27 · 181 阅读 · 0 评论 -
剑指offer:扑克牌的顺子问题
LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的...原创 2018-09-18 15:28:54 · 273 阅读 · 0 评论 -
剑指offer:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
要掌握加法运算的二进制原理首先看十进制是如何做的: 5+7=12,三步走第一步:相加各位的值,不算进位,得到2。第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果。第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12。同样我们可以用三步走的方式计算二进制值相加: 5-101,7-111第一步:相加各位的值,不算进位,得到0...原创 2018-09-18 16:13:42 · 1574 阅读 · 0 评论 -
剑指offer:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!思路:取余+字符串的自加+取子串class Solution {public: strin...原创 2018-09-17 21:31:29 · 739 阅读 · 0 评论 -
双指针问题
在刷题的过程中,发现很多类型的题都使用了双指针的思想;例如:1)在求两个链表的第一个交叉点? 快慢指针2)删除链表中连续重复的节点?双指针3)求具有环的链表的入口点?快慢指针4)求和为K的连续正序列的集合?双指针后期做一个总结。...原创 2018-09-17 19:36:52 · 147 阅读 · 0 评论 -
剑指offer:输入一棵二叉树,判断该二叉树是否是平衡二叉树。
输入一棵二叉树,判断该二叉树是否是平衡二叉树。//后续遍历二叉树,遍历过程中求子树高度,判断是否平衡class Solution {public: bool IsBalanced(TreeNode *root, int & dep){ if(root == NULL){ return true; } ...原创 2018-09-17 19:18:39 · 472 阅读 · 0 评论