剑指offer第二版
冲鸭!!!!!
这个作者很懒,什么都没留下…
展开
-
剑指offer第二版——面试题66(java)
面试题:构建乘积数组题目:给定一个数组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]不能使用除法思路:一、暴力解法的时间复杂度为O(n²)二、B[i] = A[0]×A[1]×……×A[i-1]×A[i+1]×……×A[n-1]可分为 A[0]×A[1...原创 2019-06-11 11:19:20 · 128 阅读 · 0 评论 -
剑指offer & LeetCode刷题分类记录
(个人记录,尚在更新)一、位运算二进制中1的个数 ——15https://blog.csdn.net/qq_22527013/article/details/88729605LeetCode 191. Number of 1 Bits ——https://blog.csdn.net/qq_22527013/article/details/93617793不用加减乘除做加...原创 2019-06-12 16:16:26 · 846 阅读 · 0 评论 -
剑指offer第二版——面试题47(java)
面试题:礼物的最大价值题目:在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)可以从棋盘的左上角开始拿格子里的礼物,并每次向右或向下移动一格,直到到达棋盘的右下角给定一个棋盘及其上面的礼物,计算你最多能拿到多少价值的礼物即,给定一个二维矩阵,从左上角走到右下角,每次只能向右或者向下移动,经过的格子的数的最大总和思路:使用辅助数组maxa来记录...原创 2019-05-28 15:41:56 · 195 阅读 · 0 评论 -
剑指offer第二版——面试题56(java)
面试题:数组中数字出现的次数题目一:数组中只出现一次的两个数字 一个整型数组中,除了两个数字之外,其他数字都出现了两次。时间复杂度O(n),空间复杂度O(1)题目二:数组中唯一只出现一次的数字 在一个数组中,除一个数字只出现一次之外,其他数字都出现了三次思路:题目一:参考的其他po:https://www.cnblogs.com/shiganquan/p...原创 2019-06-05 11:17:24 · 221 阅读 · 0 评论 -
剑指offer第二版——面试题52(java)
面试题:两个链表的第一个公共节点题目:输入两个链表,找出它们的第一个公共节点方法:设两个链表是长度不同的如1 2 3 5 6 7 和4 5 6 7,如果从每个链表的开始比起,则不能对每个结点成对比较,因此,先进行对齐——即先得到长链表与短链表长度相同的节点——如1 2 3 5 6 7中的3,如果是3 5 6 7和4 5 6 7,则可以通过每个节点的两两对比得到第一个公共节点对齐...原创 2019-05-30 15:25:38 · 135 阅读 · 0 评论 -
剑指offer第二版——面试题51(java)
面试题:数组中的逆序对题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。例如,在数组{7,5,6,4}中,一共存在5个逆序对,分别是(7,6),(7,5),(7,4),(6,4)和(5,4)思路:如果直接顺序扫描整个数组,则时间复杂度太高,不采用该方法以{7,5,6,4}为例分析统计逆序对的...原创 2019-05-30 14:38:12 · 279 阅读 · 0 评论 -
剑指offer第二版——面试题42(java)
面试题:连续子数组的最大和同LeetCode 53. Maximum Subarray:https://blog.csdn.net/qq_22527013/article/details/89676056题目:输入一个整型数组,数组里有整数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)思路:※有时间复杂度要求,...原创 2019-05-23 14:15:40 · 191 阅读 · 0 评论 -
剑指offer第二版——面试题46(java)
面试题:把数字翻译成字符串题目:给定一个数字,我们按照如下规则把它翻译为字符串:0——“a”;1——“b”;……;11——“l”;25——“z”一个数字可能有多个翻译如12258有5种不同的翻译,分别是“bccfi”、“bwfi”、“bczi”、“mcfi”、“mzi”请实现一个函数,用来计算一个数字有多少种不同的翻译方法思路:最开始的思路,从左到右,如12258,...原创 2019-05-27 13:55:36 · 266 阅读 · 0 评论 -
剑指offer第二版——面试题41(java)
面试题:数据流中的中位数题目:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值思路:书上给出了几种思路,简单叙述一下,因为没有敲代码,就不涉及细节啦1)用数组来存放数据。没有排序的数组则用partition方法(快排中放置元素的方...原创 2019-05-22 18:37:55 · 176 阅读 · 0 评论 -
剑指offer第二版——面试题37(java)
面试题:序列化二叉树题目:请实现两个函数,分别用来序列化和反序列化二叉树序列化二叉树:将二叉树按一定的遍历顺序保存为字符串,例如,按先序遍历,将树存储为一个字符串,其中值结尾用!,空值用#(符号可自选)反序列化二叉树:将一个二叉树序列化后的字符串,转化为一颗二叉树序列化思路:使用先序遍历,遍历时往字符串中添加值反序列化思路:(基于先序遍历)每次递归时,先将字符串...原创 2019-05-13 16:11:44 · 179 阅读 · 0 评论 -
剑指offer第二版——面试题45(java)
面试题:吧数组排成最小的数题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接处的搜优数字中最小的一个如{3,32,321},则打印出321323方法:找到一个排序规则,数组根据这个规则排序之后能排成一个最小的数字排序规则,就是用于比较两个数,按前后组合之后,哪个数更小。如数a和b,若ab<ba,则应把a放在前面,所以a更小(a和b不一定是一个1位...原创 2019-05-26 15:57:59 · 150 阅读 · 0 评论 -
剑指offer第二版——面试题44(java)
面试题:数字序列中某一位的数字题目:数字以0123456789101112131415……的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等写一个函数,求任意第n位对应的数字思路:先定位到第n位是对应的一个几位数再定位第n位是对应的这个x位数的哪个数字再定位是这个数字的第几个位置的数字1. 定位到第n位是对应...原创 2019-05-26 14:39:37 · 158 阅读 · 0 评论 -
剑指offer第二版——面试题40(java)
面试题:最小的k个数题目:输入n个整数,找出其中最小的k个数,例如,输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4【方法一】将整数排序,排序后位于最前面的k个数则为最小的k个数。时间复杂度为O(nlogn)【方法二——需要修改数组】可以基于快排的部分算法来解决问题(Partition)。可基于数组的第k个数字来调整,使得比第k个数字小的...原创 2019-05-21 20:19:15 · 177 阅读 · 0 评论 -
剑指offer第二版——面试题43(java)
面试题:1~n整数中1出现的次数题目:输入一个整数n,求1~n这n个整数的十进制表示中1出现的次数。如输入12,1~12这些整数中包括1的数字有1、10、11和12,1一共出现了5次【思路】剑指offer上的解释有点看不懂囧,参考:https://www.cnblogs.com/wangkundentisy/p/8946858.html对于一个形如xxxx的数,如要计算1出...原创 2019-05-24 14:55:14 · 311 阅读 · 3 评论 -
剑指offer第二版——面试题36(java)
面试题:二叉搜索树与双向链表题目:输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。输出转换之后的排序双向链表参考:https://www.cnblogs.com/keedor/p/4467040.html思路:【方法一】递归中始终用一个lastNode指向当前已排序的列表的最后位置(详见参考)...原创 2019-05-10 16:41:49 · 182 阅读 · 0 评论 -
把字符串转换为整数
题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0思路:若为负数,则输出负数,字符0对应48,9对应57,不在范围内则返回0,并打印错误信息public class StrToInt { public static void main(String[] args) { String s = "15998";...原创 2019-06-12 16:52:42 · 2015 阅读 · 0 评论 -
剑指offer第二版——面试题19(java)
面试题:正则表达式的匹配题目:实现一个函数,匹配包含‘.’和‘*’的正则表达式。字符‘.’表示任意一个字符;‘*’表示它前面的字符可以出现任意次(含0次)本题中,匹配是指字符串的所有字符匹配整个模式。eg:“aaa”与模式“a.a”和“ab*ac*a”匹配,但与“aa.a”和“ab*a”均不匹配代码:public class Q19 { public stat...原创 2019-06-12 17:29:58 · 215 阅读 · 0 评论 -
剑指offer第二版——面试题48(java)
面试题:最长不含重复字符的子字符串题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度假设字符串中只包含'a'~'z'的字符例如,在字符串“arabcacfr”中,最长的不含重复字符的子字符串是“acfr”,长度为4思路:最开始的思路是,计算【以每个字符为开始】的最长字符串的长度,需要使用两层循环,外层为每个字符为开始,内层循环为从该字符的下一...原创 2019-05-29 11:34:19 · 216 阅读 · 0 评论 -
剑指offer第二版——面试题65(java)
面试题:不用加减乘除做加法题目:写一个函数,求两数之和,要求在函数体内不得使用+ - * /四则运算符号思路:以5+17=22为例,先整理在十进制下的运算步骤 ① 各位相加,5+7=12,1+0=1 ② 进位,10,最低位留2 ③ 结果相加(相当于拆成5+7+10=10+2+10)10+10+2=22在此题中,四则运算不能只用,则只能使用位运算,位...原创 2019-06-11 10:42:04 · 164 阅读 · 0 评论 -
剑指offer第二版——面试题64(java)
面试题:求1+2+……+n题目:求1+2+……+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)参考:https://blog.csdn.net/qq_43165002/article/details/89607472https://blog.csdn.net/Lynn_Baby/article/details/...原创 2019-06-11 10:10:49 · 274 阅读 · 0 评论 -
剑指offer第二版——面试题63(java)
面试题:股票的最大利润题目:假设吧某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少如:一只股票在某些时间节点的价格为{9,11,8,5,7,12,16,14},如果在5买入16卖出,则收获最大利润11思路:股票交易的利润来自股票买入和卖出的差价,且只能在买入后卖出如果把买入价和卖出价两个数字组成一个数对,则利润就是这个数对的差值最大利...原创 2019-06-10 21:14:56 · 139 阅读 · 0 评论 -
剑指offer第二版——面试题62(java)
面试题:圆圈中最后剩下的数字题目:0~n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字,求出这个圆圈里剩下的最后一个数字思路:经典思路:用环形链表来模拟圆圈——创建一个共有n个节点的环形链表,然后每次在这个链表中删除第m个节点其他解法:http://zhedahht.blog.163.com/blog/static/2541117420072250...原创 2019-06-10 21:04:09 · 193 阅读 · 0 评论 -
剑指offer第二版——面试题61(java)
面试题:扑克牌中的顺子题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的2~10位数字本身,A为1,J为11,Q为12,K为13,大小王可看成任意数字思路:可把5张牌看成5个数字组成的数组,大小王是特殊的数字(假设定义为0)判断5个数字是不是连续的:把数组排序,由于0可以当成任意数字,因此可以用0去补满数组中的空缺——如果排序之后的数组不是连续的,但是有足...原创 2019-06-10 20:30:44 · 170 阅读 · 0 评论 -
剑指offer第二版——面试题60(java)
面试题:n个骰子的点数题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s,输入n,打印出s的搜有可能的值出现的概率思路:n个骰子的点数和的最小值为n,最大值为6n,且n个骰子的所有点数的排列数为6^n——需要先统计出每个点数出现的次数,然后把每个点数出现的次数除以6^n,即每个点数出现的概率可用两种方法:递归和循环递归的思路:想求出n个骰子的点数和,可以先把n个骰子分...原创 2019-06-10 20:06:50 · 403 阅读 · 0 评论 -
剑指offer第二版——面试题55(java)
面试题:二叉树的深度题目一:输入一颗二叉树的根节点,求该树的深度题目二:输入一颗二叉树的根节点,判断该树是不是平衡二叉树方法:题目一:不从找路径的角度来理解树的深度。如果一棵树只有一个节点,则它的深度为1;如果一棵树只有左/右节点,则它的深度为左/右节点树深度+1;如果有左节点和右节点,则它的深度为左右结点深度的较大值+1题目二:很自然想到,每遍历一个节点,...原创 2019-06-04 14:51:43 · 143 阅读 · 0 评论 -
剑指offer第二版——面试题59(java)
面试题:队列的最大值题目一:滑动窗口的最大值 给定一个数组和滑动窗口的大小,找出所有滑动窗口里的最大值 如:{2,3,4,2,6,2,5,1}及滑动窗口的大小3,则最大值分别为{4,4,6,6,6,5}题目二:队列的最大值 定义一个队列,并实现函数max得到队列里的最大值,要求函数max、pus...原创 2019-06-10 16:17:07 · 667 阅读 · 6 评论 -
剑指offer第二版——面试题54(java)
面试题:二叉搜索树的第k大节点题目:给定一颗二叉搜索树,请找出其中第k大的节点。例如:在图6.1中的二叉树搜索树里,按节点数值大小顺序,第三大的节点值是4方法:二叉搜索树已经是排序好的,所以直接中序顺序遍历,即可以得到排好序的数组,遍历到第k个结点返回即可代码:public class Q54 { public static void main(String[] a...原创 2019-06-04 11:12:28 · 144 阅读 · 0 评论 -
剑指offer第二版——面试题58(java)
面试题:翻转字符串题目一:翻转单词顺序 输入一个英文句子,翻转句子中单词的顺序,但是单词内字符的顺序不变(标点符号和普通字母一样处理)题目二:左旋转字符串 把字符串前面的若干个字符转移到字符串的尾部(如输入abcdefg和2,输出cdefgab)思路:题目一:java中可用split函数将字符串转化为字符数组,因此将英...原创 2019-06-10 13:51:26 · 153 阅读 · 0 评论 -
剑指offer第二版——面试题57(java)
面试题:和为s的数字题目一:在一个递增排序的数组中,找到任意一对和为s的数字题目二:输入一个正数,打印出所有和为s的连续正数序列(至少含两个数) 如输入15,输出1~5,4~6和7~8思路:题目一:先再数组中选择两个数字,如果它们的和等于s,则就是我们要找的数字。如果和<s,则说明需要两个数的和更大一些,又因为数组是递增的,因此我们可以选择将...原创 2019-06-10 13:15:43 · 164 阅读 · 0 评论 -
剑指offer第二版——面试题53(java)
面试题:在排序数组中查找数字题目一:求数字在排序数组中出现的次数题目二:求0~n-1中缺失的数字题目三:求数组中数值=下标的元素具体题目:题目一中,统计一个数字在排序数组中出现的次数题目二中,长度n-1的递增排序数组中,所有数字都是唯一的,且每个数字都在0~n-1之内,在0~n-1内的n个数字有且只有一个数字不在数组中,找出该数题目三中,单调递增数组,数组中每个元素都是...原创 2019-06-03 22:51:09 · 145 阅读 · 0 评论 -
剑指offer第二版——面试题50(java)
面试题:第一个值出现一次的字符题目一:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出b方法:对字符串进行两次遍历,第一次:用一个字典来保存字符出现的次数;第二次:查找只出现过一次的第一次出现的字符(书上直接用了一个256的数组来实现,因为字符是char为8bit类型)题目二:字符流中第一个只出现一次的字符实现一个函数,用来找出字...原创 2019-05-29 22:56:59 · 244 阅读 · 0 评论 -
剑指offer第二版——面试题49(java)
面试题:丑数题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做第一个丑数思路:参考:https://blog.csdn.net/Tianzez/article/details/80385144“以空间换时间”根据丑数的定义,一个丑数肯定是...原创 2019-05-29 21:15:14 · 87 阅读 · 0 评论 -
剑指offer第二版——面试题35(java)
面试题:复杂链表的复制题目:实现函数,复制一个复杂链表,链表中,每个节点除了有一个next指针指向下一个节点,还有一个sibling指针指向链表中的任意节点或nullptr思路:(全是书上写的 我啥也没想出来QAQ)先提到了两种思路,一个是:先复制主路线,即用next连接的部分,再复制sibling,但是这样每个结点的sibling都需要从头开始寻找,时间复杂度太高;另一个是:...原创 2019-05-07 15:27:18 · 130 阅读 · 0 评论 -
剑指offer第二版——面试题39(java)
面试题39:数组中出现次数超过一半的数字题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如:输入一个长度为9的数组{1,2,3,2,2,2,5,4,2},由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2【方法一】如果数组中有一个数字出现的次数超过了数组长度的一半,则对数组排序之后,位于数组中间的数字一定就是那个出现次数超过数组长度一半的数字——...原创 2019-05-14 19:52:18 · 171 阅读 · 0 评论 -
剑指offer第二版——面试题38(java)
面试题:字符串的排序题目:输入一个字符串,打印出该字符串中字符的所有排列例如:输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba思路:对一个字符串进行全排列可分为两个问题:1.选择第一个位置的字符串;2. 对后面的子字符串进行全排列递归过程如长度为3的字符串,先固定第一个字符串,再对后面的长度为2的字符串进行...原创 2019-05-14 16:08:25 · 267 阅读 · 0 评论 -
剑指offer第二版——面试题18(java)
面试题18:删除链表的节点题目一 :在O(1)时间内删除链表节点——见【LeetCode 237. Delete Node in a Linked List & 剑指offer Q18】题目二:删除链表中重复的节点题目描述:在一个排序的链表中,如何删除重复的节点如1→2→3→3→4→4→5 删除重复节点,重复节点不保留之后得到:1→2→5分为三个部分:① 删除...原创 2019-04-10 11:26:02 · 233 阅读 · 0 评论 -
剑指offer第二版——面试题16(java)
面试题16:数值的整数次方题目:实现函数power(double base, int exponent),求base的exponent次方。不能使用库函数,同时不需要考虑大数问题需要考虑的问题:次方为正、负、0;输入为0次方为正时,直接计算;次方为负时,先计算正的次方数,再求倒数;如果输入为0,次方为负——异常处理先考虑base,再考虑exponentpublic ...原创 2019-03-27 10:17:06 · 113 阅读 · 0 评论 -
剑指offer第二版——面试题15(java)
面试题15:二进制中1的个数题目描述:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1,因此如果输入9,该函数输出2基础:1. 位运算:左移补右,右移补左;若为负数,则右移后左边补12. & 与运算 eg:(无符号)6:110 3:10 6&3=10→2 6&4=100→4...原创 2019-03-22 00:26:13 · 179 阅读 · 0 评论 -
剑指offer第二版——面试题14(java)
面试题14:剪绳子题目描述:给定一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]* k[1] * … *k[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。边界:m、n都是整数,n>1并且m>1动态规...原创 2019-03-21 21:37:40 · 136 阅读 · 0 评论 -
剑指offer第二版——面试题6(java)
面试题6:从尾到头打印链表题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值链表的结点定义如下public class ListNode { int val; ListNode next; ListNode(int x) { val = x; }}注意:面试中,如果打算修改输入的数据,最好先问好是否数据是允许修改的...原创 2019-03-08 10:43:20 · 261 阅读 · 0 评论