牛客网
zd_njupt
这个作者很懒,什么都没留下…
展开
-
2019字节跳动
1.求最长非重复字符串长度 分析:做个hash_table表,记录每个字符的位置。 pre记录第一个不重复的字符的位置。#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;int proce原创 2018-09-13 14:40:39 · 684 阅读 · 0 评论 -
剑指offer 31、32:整数中1出现的次数、把数组排成最小的数
31:题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。 思路: 设定整数点(如1、10、100等等)作为位置点i(对应...原创 2018-08-02 11:03:09 · 118 阅读 · 0 评论 -
剑指offer 45、46:扑克牌顺子 、孩子们的游戏(圆圈中最后剩下的数)
45.题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…..LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为...原创 2018-08-06 14:59:23 · 219 阅读 · 0 评论 -
剑指offer 59、60:按之字形顺序打印二叉树 、把二叉树打印成多行
59.题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 1 2 34 5 6 7输出1 3 2 4 5 6 7输入1 -- 2 3左右 --- 7 6 5 4 右左输出1 -- 3 2 --- 4 5 6 7 栈结构...原创 2018-08-10 13:11:26 · 113 阅读 · 0 评论 -
剑指offer 57、58:二叉树的下一个结点 、对称的二叉树
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 思路:如果有右子树,则下一节点就是右子树的最左边的节点。 如果没有右子树,并且是父节点的左子树,则下一节点是父节点 如果没有右子树,并且是父节点的右子树,找父节点的父节点,直到父节点位于左子树/*struct TreeLinkNode {...原创 2018-08-10 12:10:59 · 135 阅读 · 0 评论 -
剑指offer 55、56:链表中环的入口结点 、删除链表中重复的结点
55.题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ...原创 2018-08-10 11:16:25 · 125 阅读 · 0 评论 -
剑指offer 43、44:左旋转字符串、翻转单词顺序列
43.题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它! 思路:XY -> YX (XT YT)T==YX 每个子串反转后,再总体反转。...原创 2018-08-06 09:50:29 · 127 阅读 · 0 评论 -
剑指offer 41、42:和为S的连续正数序列 、和为S的两个数字
41:题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描述: 输出所有和为S的连续...原创 2018-08-06 09:07:26 · 102 阅读 · 0 评论 -
剑指offer 39、40:平衡二叉树 、数组中只出现一次的数字
39.题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 思路:平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉树:它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。平衡因子(bf):结点的左子树的深度减去右子树的深度,那么显然-1<=bf<=1 1.从下往上计算每个节点的深度,存在问题:即使子树不符合,也要...原创 2018-08-05 15:09:16 · 134 阅读 · 0 评论 -
剑指offer 53、54:表示数值的字符串 、字符流中第一个不重复的字符
53.题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。class Solution {public: bool isNumeric(char* string) { ...原创 2018-08-09 12:01:50 · 146 阅读 · 0 评论 -
剑指offer 33、34:丑数、第一个只出现一次的字符
33.题目描述 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 思路:丑数是由2,3,5任意乘得到的,质因数只能是2,3,5.所以构建数组,存储最小组合数 data[0]=1 1*2,1*3,1*5 选最小的 2,然后2对应指向data[1] dat...原创 2018-08-02 11:47:23 · 177 阅读 · 0 评论 -
剑指offer 47、48:求1+2+3+...+n 、不用加减乘除做加法
47.题目描述 求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 思路:通过逻辑运算,达到控制操作的效果。class Solution {public: int Sum_Solution(int n) { int sum=0; n && (...原创 2018-08-07 13:36:39 · 160 阅读 · 0 评论 -
2018秋招中国电信笔试题
1.求一个32bit的数的反转。 分析:1.考虑溢出问题,2.考虑尾部为0的反转。 转成字符串进行反转,然后再转成整形,如果溢出则为0def process(data): result=0 data1 = int(data) if data1 >= 0: result=int(data[::-1]) else: resu...原创 2018-09-10 20:49:14 · 9479 阅读 · 0 评论 -
2019华为秋招试题
1.两家商店打折,计算哪家价格最低,精确到分。#include<iostream>#include<algorithm>using namespace std;float process1(int num,float price){ float sum_all = num*price; if (num >= 3) su...原创 2018-09-12 16:34:37 · 574 阅读 · 0 评论 -
网易2019秋季校园招聘编程题真题集合
1.[编程题] 俄罗斯方块 时间限制:1秒 空间限制:262144K 小易有一个古老的游戏机,上面有着经典的游戏俄罗斯方块。因为它比较古老,所以规则和一般的俄罗斯方块不同。 荧幕上一共有 n 列,每次都会有一个 1 x 1 的方块随机落下,在同一列中,后落下的方块会叠在先前的方块之上,当一整行方块都被占满时,这一行会被消去,并得到1分。 有一天,小易又开了一局游戏,当玩到第 m 个方块落...原创 2018-08-28 20:56:35 · 704 阅读 · 0 评论 -
剑指offer 65、66:矩阵中的路径 、机器人的运动范围
65.题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串”bcced”的路径,但是矩阵中不包含”abcb”路径,...原创 2018-08-16 11:08:29 · 216 阅读 · 0 评论 -
剑指offer 51、52:构建乘积数组 、正则表达式匹配
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]。不能使用除法。 思路: 1 2 3 4 5data1 data21 1*2*3*4*5*11*1 2*3*4*5...原创 2018-08-08 15:37:29 · 163 阅读 · 0 评论 -
剑指offer 49、50:把字符串转换成整数 、数组中重复的数字
49:题目描述 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法的数值表达则返回该数字,否则返回0 示例1 输入 +2147483647 ...原创 2018-08-08 11:02:21 · 163 阅读 · 0 评论 -
剑指offer 63、64:数据流中的中位数 、滑动窗口的最大值
63.题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。 思路:堆插入时间复杂度O(log n) 设置最大堆 最小堆。其中最大堆的最大值<=最小堆...原创 2018-08-15 15:01:43 · 323 阅读 · 0 评论 -
剑指offer 63、64:数据流中的中位数 、滑动窗口的最大值
63.题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。 思路:堆插入时间复杂度O(log n) 设置最大堆 最小堆。其中最大堆的最大值<=最小堆...原创 2018-08-15 15:01:42 · 217 阅读 · 0 评论 -
剑指offer 61、62:序列化二叉树 、二叉搜索树的第k个结点
题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化:以某种顺序遍历二叉树,NULL的位置用特殊字符代替 1 2 34 5 6 7前序 序列化:1,2,4,#,#,5,#,#,3,#,#,6,#,#,7,#,#,使用逗号的原因,分割字符,例如节点值为11的话。字符串是 ...原创 2018-08-12 15:42:43 · 148 阅读 · 0 评论 -
剑指offer 37、38:数字在排序数组中出现的次数 、二叉树的深度
36:题目描述 统计一个数字在排序数组中出现的次数。 思路:二分法查找class Solution {public: int process(vector&lt;int&gt;&amp;data,float k) { int left=0,right=data.size()-1; int mid=0; while(left&...原创 2018-08-04 16:38:10 · 150 阅读 · 0 评论 -
剑指offer 35、36:数组中的逆序对 、两个链表的第一个公共结点
35.题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 输入描述: 题目保证输入的数组中没有的相同的数字 数据范围: 对于%50的数据,size<=10^4 对于%75的数据,size<=10^5...原创 2018-08-04 15:42:52 · 168 阅读 · 0 评论 -
剑指offer 29、30:最小的K个数 、连续子数组的最大和
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。class Solution {public: vector&amp;lt;int&amp;gt; GetLeastNumbers_Solution(vector&amp;lt;int&amp;gt; input, int k) { if(input.empty() || ...原创 2018-07-10 10:49:15 · 177 阅读 · 0 评论 -
剑指offer 5:用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 思路:栈 先进后出,队列 先进先出 1 2 3 栈 3 2 1 1 2 3 队列 1 2 3 stack1进栈后为1 2 3 出栈并保存在stack2中为3 2 1,stack2出栈就和队列一致了。 push,在stack1中进行,pop则把stack1中的元素输出到stack2中,...原创 2018-06-14 17:18:26 · 148 阅读 · 0 评论 -
剑指offer 4:重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路:中序序列中,节点左边为左子树,右边为右子树。前序第一个为根节点 1 2 4 7 3 5 6 8左 4 7 2 1 5 3 8 6 右 ...原创 2018-06-14 17:05:25 · 193 阅读 · 0 评论 -
剑指offer 3:从尾到头打印链表
题目描述 输入一个链表,从尾到头打印链表每个节点的值。思路:1.从尾到头,类似先进后出,stack。2.反转链表。/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {...原创 2018-06-14 16:48:06 · 197 阅读 · 0 评论 -
剑指offer 2:替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 思路1:申请辅助空间 思路2:在原数组上修改===》1.从前向后,每次遇到空格,后面的字符都要向后移动,复杂度很高O(n^2),不建议。2.从后向前,字符只需移动一次就能实现,复杂度O(n).思路1:class Sol...原创 2018-06-14 16:26:57 · 344 阅读 · 0 评论 -
剑指offer 8、9、10:跳台阶、变态跳台阶、矩形覆盖
八:题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路:1 12 11 23 111 12 214 1111 22 112 121 211 5 11111 122 212 221 1112 1121 1211 21111 12 23 34 55 8class Solution...原创 2018-06-22 12:16:52 · 125 阅读 · 0 评论 -
剑指offer 1:二维数组中的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:题目中指出是数组顺序排序的,因此可以根据这个条件优化搜索路径。 1.从左上角开始:向右与向下都是增加的,因此无法根据当前值判断下一步的走向。 2.从右上角开始:向左是减小的,向下是增加的,因此根据当前值可以判...原创 2018-06-14 15:58:16 · 132 阅读 · 0 评论 -
剑指offer 7:斐波那契数列
算法知识视频讲解 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n&amp;lt;=39 思路:斐波那契可以用递归做,但是容易出现栈溢出,可以把递归改成尾递归的形式;可以用循环做。//递归class Solution {public: int Fibonacci(int n) { if(n==0 || n==...原创 2018-06-22 10:39:17 · 152 阅读 · 0 评论 -
剑指offer 6:旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 思路:看起来挺好做的,但是复杂度为O(n);这题给出了排序数组,明显要用到这个条件。二分查找法复杂度为O(...原创 2018-06-22 10:23:52 · 134 阅读 · 0 评论 -
贪心算法
引:https://blog.csdn.net/yanerhao/article/details/70162902 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择,贪心策略使用的前提是局部最优能导致全局最优。必须注意的是,贪心算法不是对所有问题都...原创 2018-06-21 16:28:19 · 132 阅读 · 0 评论 -
剑指offer 11:二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路:1.逐位进行&amp;amp;amp;判断;2.n&amp;amp;amp;(n-1)相当于把最右边的1变为0。10011 &amp;amp;amp; 10010 = 1001010010 &amp;amp;amp; 10001 = 1000010000 &amp;amp;amp; 01111 = 00000class Sol原创 2018-06-22 15:28:52 · 171 阅读 · 0 评论 -
剑指offer 12、13:数值的整数次方、调整数组顺序使奇数位于偶数前面
第十二题题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 思路:类似于第九题,快速幂运算。这一题要分析exponent为负数的情况,且base为0的情况。 复杂度:O(n)class Solution {public: double Power(double base, int exponent) { ...原创 2018-06-22 16:28:31 · 174 阅读 · 0 评论 -
剑指offer 27、28:字符串的排列、数组中出现次数超过一半的数字
题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 思路: abc a bc b ac ...原创 2018-07-10 10:44:23 · 159 阅读 · 0 评论 -
剑指offer 25、26:复杂链表的复制、二叉搜索树与双向链表
25题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 思路:1 2 3 4 NULL 第一步:在原节点后复制新的节点 1 1 2 2 3 3 4 4 NULL 第二步:复制random对应关系 第三步:分离原链表...原创 2018-06-27 10:22:53 · 104 阅读 · 0 评论 -
剑指offer 22、23、24: 从上往下打印二叉树、二叉搜索树的后序遍历序列、二叉树中和为某一值的路径
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 思路:层序,用队列,先进先出。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), rig...原创 2018-06-26 15:06:31 · 143 阅读 · 0 评论 -
剑指offer 19、20、21:顺时针打印矩阵、包含min函数的栈 、栈的压入、弹出序列
第十九题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 思路:每一次循环是外侧一圈,那么设置两个标记,每次循环后相当于一个新的矩阵,再次循环。然后分析特殊情况,即只有一行,或...原创 2018-06-26 10:29:12 · 200 阅读 · 0 评论 -
背包问题
0-1背包: 每种物品只有一个,选与不选(0-1) 容量为10的背包,有5种物品,每种物品只有一个,其重量分别为5,4,3,2,1,其价值分别为1,2,3,4,5。 设计算法,实现背包内物品价值最大。 #include <iostream>#include<algorithm>using namespace std;int main() { ...原创 2018-06-15 13:20:26 · 290 阅读 · 0 评论