01 2018 档案
摘要:题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 思路:这道题用到两个堆,使用优先级队列进行实现,原始的优先级队列是最大堆,加上greater仿函数之后
阅读全文
摘要:题目描述 给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。 思路:二叉搜索树的中序遍历是递增的序列,使用循环的中序遍历找到第k个节点就行了,对中序遍历的循环版本没理解,使用一个stack,找到最左边的节点
阅读全文
摘要:题目描述 请实现两个函数,分别用来序列化和反序列化二叉树。 思路:序列化就是将一个数据结构或物体转化为一个位序列,可以存进一个文件或者内存缓冲器中,然后通过网络连接在相同的或者另一个电脑环境中被还原,还原的过程叫做去序列化。 使用C++ ostringstream来格式化字符串输出,使用一次后清空的
阅读全文
摘要:题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 思路:二叉树的层次遍历。 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(
阅读全文
摘要:题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 思路:最暴力的方法就是使用队列进行层次遍历,使用sz存储每层的节点个数。然后反转偶数层就可以了。 优化方法:使用两个栈,一个栈存奇数层的结果,按
阅读全文
摘要:题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 思路:分为递归和迭代版本。 递归版本,这道题要理解题目意思,是左子树的左节点等于右子树的右节点才是对称的,自己写成了左子树的左节点和右节点是否相等了,需要一个递归的helper函
阅读全文
摘要:题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 思路: 这题还是自己的思路错误,还有就是对二叉树的遍历没有理解,只是记得左中右,根的前一个节点是左子树遍历的最后一个节点,根节点的下一个节点是右子树遍历的
阅读全文
摘要:题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 思路:这题首先熟悉哨兵节点的用法。自己对模板还是没有很好的节点。 //哨兵节点 ListNode dummyNode
阅读全文
摘要:题目描述 一个链表中包含环,请找出该链表的环的入口结点。 思路:就是a= c,画个图找出规律就行,只有一个节点的时候,没有环,所以不存在第一个入口环节点,因此返回空。而不是返回第一个元素。就是按照思路写就行,没有其他的套路。 /* struct ListNode { int val; struct
阅读全文
摘要:题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符。 思路:开始以
阅读全文
摘要:1、当我们提供一个类内初始值时,必须以符号=或者花括号表示。 必须使用=或者{} n个节点,n-1条边的无向图是棵树。 2.将一个字符串转换为可以修改的char数组,或者一个char*指向一个string。必须使用strcpy才可以实现。 3.迭代器失效问题,vector插入删除元素后,原来的迭代器
阅读全文
摘要:题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。 思路:这题目非常繁琐;要考虑很多种情况,
阅读全文
摘要:[Offer收割]编程练习赛44 对于第一题题目1 : 扫雷游戏,首先要想清楚思路,虽然是暴力算法,但是这八个方向要自己把坐标写正确,不要慌乱,自己写的时候就写错了一个,第二个就是判断的时候,j + 1>=0,这种是显然的事情,应该是j +1 < N,写草稿也要认真。 还有一个非常非常大的错误。 前
阅读全文
摘要:题目描述 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均
阅读全文
摘要:题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法的数值表达则返回该数字,否则返回0 示例1 输入 +2147483647 1a33 输出 21474
阅读全文
摘要:题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 思路: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]。不能使用除法。 收获:先把公式想清楚了再编程序就会思路清晰,写程序写的快。 b[0] 1 A[1] A
阅读全文
摘要:题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 思路:感觉还是对位运算不太熟悉。 ^异或是不进位加法,相同的为0,不同的为1; &与运算是都为1就为1,有一个是0就全为0; |或运算只要有一个是1就是1. 例子:5 + 7; 这题首先1)计算不进位的加法,5
阅读全文
摘要:题目描述 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 思路: 1)使用构造函数的方法,需要使用static变量。 2)虚函数原理 3)利用函数指针原理 4)短路原理,使用&&,|| 短路原理指的是a
阅读全文
摘要:C++规定const静态类成员可以直接初始化,其他非const的静态类成员需要在类声明以外初始化,我们一般选择在类的实现文件中初始化,初始化的方式是书写一遍类型的定义: 一、静态成员函数中不能调用非静态成员。 二、非静态成员函数中可以调用静态成员。因为静态成员属于类本身,在类的对象产生之前就已经存在
阅读全文
摘要:题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任
阅读全文
摘要:将字符串绑定到输入流istringstream,然后使用getline的第三个参数,自定义使用什么符号进行分割就可以了。 2、使用strtok函数。 strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串中包含的所有字符。当strtok()在参数s的字符
阅读全文
摘要:题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子..
阅读全文
摘要:题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
阅读全文
摘要:题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a
阅读全文
摘要:思路:借鉴一下前面那题的思路,使用两个变量small和big,分别初始化为1,2,因为是连续几个数的和,如果tmp>um,需要循环的减去small,小于的时候加上比较大的big,数组要放在循环里面定义,这样不需要增加清空的代码。循环条件是small增加到(1+s)/2为止。不能是等于,只能小于,因为
阅读全文
摘要:思路: 使用两个变量small和big分别表示数组的下标,small = 0,big = end,然后开始循环,如果两者对应的数组之和等于sum,那么比较一下乘积是否是目前位置最小的,是最小的就放入result数组中,然后移动small(一定要记得移动,不然死循环),如果大于sum,就--big,小
阅读全文
摘要:题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 思路:记住位运算的基本操作,与或非,异或,异或是两个数相同则为0,不同为1,理解为加法运算。一定记住。 还有就是将计算机表示位数定为32位或者64位,这样就可以遍历数的每一位,看是否为1. 这一题
阅读全文
摘要:题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 思路: 这题是基于上一题的求二叉树的深度写出来的代码,记住二叉树的每次递归返回的是啥很关键, 这题自己理解的是调用helper函数返回高度,但是用了-1,只要不满足二叉树的要求就返回-1,这个函数是求高度的,本质还是按照写高度的那个函数那么写
阅读全文
摘要:题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 思路: 1)递归方法:记住每次递归返回的是啥,这里返回的是该根节点对应的高度。 所以先找左节点的高度,和右节点的高度,然后两者的最大高度加上1就是答案。 /* stru
阅读全文
摘要:题目描述 统计一个数字在排序数组中出现的次数。 思路:记住二分搜索的复杂度是O(logn),复杂度的计算方式是主定理。二分搜索模板要记得。 这题要注意没有找到相关元素的返回情况,初始化的时候将两个位置初始化为-1,在最后判断以下,如果两个都是-1就是没有找到位置,这个时候就返回0,如果找到了就pos
阅读全文
摘要:题目描述 输入两个链表,找出它们的第一个公共结点。 思路:这里首先理解一下暴力的方法,对于链表1的每一个节点,都去链表2中查找是否有该节点。 然后自己在思考的时候陷入了是否有环链表,这道题目不需要考虑是否有环,因为有环其实就是一个链表。 这题使用快慢指针,先得到两个链表的长度,定义两个头结点,哪个长
阅读全文
摘要:思路: 过程:p1大于p2,因为这时左右两边都是排序数组,所以逆序对是{7,6},{7,4},数目等于此时p2结束位置的右边数组元素个数,p2-p1, 然后按照归并的过程,--p1,记住这个稍微改动的就是归并排序以前是从开始位置比较,这里是从最后一个位置开始比较,采用--的形式,之后需要排序才能co
阅读全文
摘要:题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置 思路:使用一个hashmap遍历一遍,统计每个字符出现的次数,然后再统计一遍,找到第一个出现一次的元素。 所有的字符有256个,可以开辟一个256的数组,直接使用字符访问就可以了,会
阅读全文

浙公网安备 33010602011771号