【算法】把字符串转换成整数,树中两个结点的最低公共祖先

本书最后的两道题,作者拿了两个面试案例来呈现,主要是要弄清面试官的意图、考虑周全,有些算法虽然容易,不要轻易下手。在此之上最好写出具有鲁棒性的和好的扩展性的代码,遵循编码规范。 面试题67:把字符串转换成整数 请你写一个函数StrToInt,实现把字符串转换成整数这个功能。当然,不能使用atoi...

2018-10-24 20:27:01

阅读数 167

评论数 0

【位运算,递推】不用加减乘除做加法,构建乘积数组

面试题65:不用加减乘除做加法 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、×、÷四则运算符号。 加法本质是先各位相加不考虑进位,再把进位和前一步结果各位相加,如此反复直到不产生进位。 第①步各位相加不考虑进位在二进制情形下和异或一样;第二步进位仅当二进制是1和1时向高位产生一个...

2018-10-24 18:57:41

阅读数 92

评论数 0

【语言特性】带限制地求1+2+...+n

就是一个利用语言特性的题,四种都是C++实现,第三个也可以用纯C实现。 面试题64:带限制地求1+2+…+n 求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 解法一(构造函数) 创建对象数组即可多次调用构造...

2018-10-24 17:53:50

阅读数 80

评论数 0

【算法】扑克牌中的顺子,约瑟夫问题,股票的最大利润

面试题61:扑克牌中的顺子 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。 大小王当成0,对其进行排序,统计相邻数字间的空缺总数能否被数组中的0填充。非0数字重复出现,数组一定不连续。 ...

2018-10-24 15:40:38

阅读数 133

评论数 0

【交替数组】n个骰子的点数

选择合理的数据结构表述问题;分析模型中的内在规律,并用编程语言表述这种规律。 面试题60:n个骰子的点数 解法一 用递归的方式,每次拿出一个骰子,对1~6点再调用下一层,递归到底更新总数的频数。基本就是一个排列树穷举,有大量的重复计算。 作者递归出口是1,而且在第一步时没有减1,感觉非常难...

2018-10-24 12:17:41

阅读数 52

评论数 0

【队列】滑动窗口的最大值序列,带max函数的队列

窗口即队列,本质是一样的。 面试题59-1:滑动窗口的最大值序列 给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。例如,如果输入数组{2, 3, 4, 2, 6, 2, 5, 1}及滑动窗口的大小3,那么一共存在6个滑动窗口,它们的最大值分别为{4, 4, 6, 6, 6, 5}。 ...

2018-10-23 20:51:05

阅读数 126

评论数 0

【字符串】翻转单词顺序,左旋转字符串

面试题58-1:翻转单词顺序 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I...

2018-10-23 17:00:34

阅读数 61

评论数 0

【贪心法】和为s的两个数字,和为s的连续正整数序列

面试题57-1:和为s的两个数字 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。 两个游标一个在数组最左一个在最右,分别指示最小和最大的数。在循环里每次检查他们的加和,如果小了就把左边游标向右移,因为此时左边游...

2018-10-23 14:08:33

阅读数 90

评论数 0

【位运算】复制数组中数字出现的次数

数组中大部分数字都重复出现了k次,这里不妨叫k复制数组。 面试题56-1:二复制数组中只出现一次的两个数字 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 用按位异或运算,一个数字按位异或它自己就是0...

2018-10-23 10:44:04

阅读数 70

评论数 0

【二叉树】BST的第k大结点,二叉树的深度,平衡二叉树

面试题54:二叉搜索树的第k个结点 给定一棵二叉搜索树,请找出其中的第k大的结点。 左边都比中间小,右边都比中间大,所以用中序遍历(左中右)就可以实现按结点的值从小到大遍历,遍历时候进行计数即可。 #include<bits/stdc++.h&a...

2018-10-23 08:58:37

阅读数 244

评论数 0

【二分查找】在排序数组中查找数字

排序数组里很多二分查找的题目,不能把排序这个性质浪费了。 面试题53-1:数字在排序数组中出现的次数 统计一个数字在排序数组中出现的次数。例如输入排序数组{1, 2, 3, 3, 3, 3, 4, 5}和数字3,由于3在这个数组中出现了4次,因此输出4。 二分查找第一个k和最后一个k,计算它们...

2018-10-19 20:46:54

阅读数 105

评论数 0

【归并排序,同步指针】数组中的逆序对,两个链表的第一个公共结点

面试题51:数组中的逆序对 在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 分成长度1的子数组,在合并之前统计相邻子数组之间的逆序对个数,然后让它们升序合并,升序的最大的一定在最后面,然后再如此反复即可。具体图解见书上...

2018-10-19 19:20:33

阅读数 57

评论数 0

【打表】第一个只出现一次的字符与字符流内实现

面试题50:第一个只出现一次的字符 在字符串中找出第一个只出现一次的字符。如输入"abaccdeff",则输出’b’。 输入一共就256种ASCII字符,第一遍扫描把出现次数记到数组里,第二遍边扫描边到数组里去找。 #include<b...

2018-10-19 16:24:16

阅读数 71

评论数 0

【DP,打表】最长不含重复字符的子字符串,丑数

面试题48:最长不含重复字符的子字符串 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含从’a’到’z’的字符。 用f(i)表示以i位置字符结尾的最长不含重复字符的子字符串的长度,则所求的就是i从0~n-1中最大的一个f(i)。 在遍历数组时,记...

2018-10-19 14:52:02

阅读数 232

评论数 0

【DP】礼物的最大价值

面试题47:礼物的最大价值 在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向左或者向下移动一格直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物? 之前Pytho...

2018-09-28 21:47:59

阅读数 120

评论数 0

【DP】把数字翻译成字符串

面试题46:把数字翻译成字符串 给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成”a”,1翻译成”b”,……,11翻译成”l”,……,25翻译成”z”。一个数字可能有多个翻译。例如12258有5种不同的翻译,它们分别是”bccfi”、”bwfi”、”bczi”、”mcfi”和”mz...

2018-09-13 20:40:20

阅读数 133

评论数 0

【算法】数字序列中某一位的数字,把数组排成最小的数

面试题44:数字序列中某一位的数字 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数求任意位对应的数字。 每次跳过一片数字海,每个数字海都是位数一样的数字组成的,这...

2018-09-13 20:08:40

阅读数 84

评论数 0

【递归】从1到n整数中1出现的次数

面试题43:从1到n整数中1出现的次数 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。 给定一个数字,如1~21345,可以从最高位拆开分成1~1345和1346~21345这两...

2018-09-13 16:01:14

阅读数 84

评论数 0

【DP】连续子数组的最大和

面试题42:连续子数组的最大和 输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。 ...

2018-09-12 09:54:35

阅读数 105

评论数 0

【大小堆】数据流中的中位数

面试题41:数据流中的中位数 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 书上214~216页的分析非常精彩,感觉再总结些什么都是东施效颦了。...

2018-09-11 21:19:31

阅读数 130

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭