
面试题
德卡拉
始于乐趣 终于经典
展开
-
栈和队列之经典(下)
(4)判断元素出栈、入栈顺序的合法性。如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1)是合法序列,入栈的序列(1,2,3,4,5),出栈序列为(1,5,3,2,4)是不合法序列 。对于有关栈的问题,建立辅助栈解决会是很不错的选择。在本题中把输入的入栈序列的数字依次压入该辅助栈,并按照出栈序列依次从该栈中弹出数字。 规律:如果下一个弹出的数字刚好是栈顶数字,那么直接弹出;...原创 2017-12-15 18:57:02 · 377 阅读 · 0 评论 -
链表面试题总汇
反转,合并单链表 ,查找单链表中间节点原创 2017-09-20 22:03:13 · 284 阅读 · 0 评论 -
【编程练习】字符串系列
空格替换 请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。 给定一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的string 测试样例: “Mr John Smith”,13 返回:”Mr%20J...原创 2018-08-22 17:07:24 · 365 阅读 · 0 评论 -
编程练习:链表习题(上)
(1)题目:输入两个链表,找出它们的第一个公共节点。思路: 1)计算出链表1的长度; 2)计算出链表2的长度; 3)计算出链表1和链表2的长度差dif; 4)长链表先走dif步,然后两条链表一起走,直到两个链表的节点第一次相等为止,此时指针位置即为所求。代码实现:class Solution {public: ListNode* FindFirstCom...原创 2018-08-03 10:47:45 · 1151 阅读 · 0 评论 -
编程练习:进制转换
题目:给定一个十进制数M,以及需要转换的进制数。将十进制数M转化为N进制数。#include <iostream>using namespace std;int main(){ string s = "", table = "0123456789ABCDEF"; int M = 0, N = 0; cin >> M >>...原创 2018-08-02 22:03:42 · 1694 阅读 · 0 评论 -
【编程练习】校招真题
(1)下厨房 牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。 输入描述:每个输入包含 1 个测试用例。每个测试用例的第 i 行,表示完成第 i 件料理需要哪些材料,各个材料用空格隔开,输入只包含大写英文字母和空格,输入文件不超过 50 行,每一行不超过 50 个字符。 输出描述:输出一行一个数字表示完成所有料理需要多少种不同的材料。 示例1 ...原创 2018-08-11 20:35:44 · 357 阅读 · 0 评论 -
编程练习:链表习题(下)
(6)convert-sorted-list-to-binary-search-tree Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST. 思路: (1)分析题意:要求将一条有序链表转化为一颗二叉搜索树 (2)快慢指针法找...原创 2018-08-06 14:55:31 · 460 阅读 · 0 评论 -
编程练习:阶乘末尾0的个数+数字和为sum的方法数
题目:输入一个正整数,求n!(即阶乘)末尾有多少个0? 比如n=10;n! = 3628800,所以答案为2分析:拿到题本来会想到先求出阶乘的结果,然后再查看该结果最后一位是否为0(%10查看最后一位是否为0,如果是再除以10,消掉最后一位,循环直至最后一位不是0,再将计数器返回回去,但是阶乘的性质很可能会产生溢出,所以这个办法行不通。 阶乘是1*2*3*4…(n-1)*n,所...原创 2018-07-26 20:52:04 · 274 阅读 · 0 评论 -
二叉树相关面试题(上)
一,将二叉搜索树转换为一个排序的双向链表。 提示:要求不能创建任何新的结点,只能调整树中节点的指向。 eg: 搜索二叉树:左节点的值小于父节点的值,右节点的值大于父节点的值。 思路:二叉树中每个节点有两个指向子节点的指针,双向链表中每个节点也有两个指针,两个节点结构相似,同时二叉搜索树也是一种排序的数据结构。因此理论上可能实现二叉搜索树和排序双向链表的转换。 步骤:在将二叉搜索树转换...原创 2018-03-02 16:27:00 · 989 阅读 · 0 评论 -
栈和队列之经典(上篇)
要完成下面关于栈和队列的题目,首先要明白 栈的特性:后进先出 队列的特性:先进先出 (1)实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值的操作)的时间复杂度为O(1) 。 本题的关键是要得到栈的最小元素min,我们的第一反应可能是每次压入一个新的元素时,将栈里所有元素排序,让最小元素位于栈顶,但是这样破坏了栈的规律,它不能保证最后入栈的元素可以最先出栈。 ...原创 2017-12-11 17:11:04 · 226 阅读 · 0 评论 -
替换字符串空格+N的阶乘末尾0个数+整数二进制位中1的个数
一,替换字符串中的空格为$$$,要求时间复杂度为O(N).> 例如:将“talk is cheap show me the code”替换为talk$$$is$$$cheap$$$show> $$$me$$$the$$$code”.思路: 1》首先看到这个问题,最直观的做法是从头到尾扫描字符串,每次遇到空格字符时将一个字符替换为3个字符,因此需把空格后面所有字符都后移2字节,否则就原创 2018-01-26 19:17:51 · 691 阅读 · 0 评论 -
堆 & 栈& 内存溢出
堆与栈的区别,递归没有退出条件会怎样,系统怎么判定栈溢出?1,管理方式不同:栈编译器自动管理,无需程序员手工控制;而堆空间的申请释放工作由程序员控制,容易产生内存泄漏。2,空间大小不同:栈是一块连续的内存,栈顶的地址和栈底的地址是系统预先规定好的,当申请空间大于剩余空间,提示溢出;堆是不连续的内存区域,获得空间较灵活也较大。3,是否产生内存碎片对于堆来讲,频繁的malloc/free(ne...原创 2018-09-21 23:04:21 · 352 阅读 · 0 评论