程序员面试代码指南
开发小牛进阶
Java小白,公众号同名。
展开
-
《程序员代码面试指南》实现一个有getMin()功能的栈
题目: 实现一个特殊的栈,在实现基本功能的基础上,再实现返回栈中最小元素的操作。描述: 用两个栈,一个栈用来保存当前栈中的元素,其功能和一个正常的栈没有什么区别,记作stackData;另一个栈用来保存每一步的最小值,这个栈记作stackMin。 方法一:压入数据规则: 假设当前数据为 newNum, 现将其压入 stackData。然后判断 ...原创 2018-05-26 15:36:11 · 338 阅读 · 0 评论 -
《程序员代码面试指南》字符串之数字子串求和
题目:给定一个字符串str,求其全部数字串所代表的数字之和要求:1.忽略小数点字符,例如"A1.3",其中包含数字1和3。 2.如果紧贴数字子串左边出现字符"-",当连续出现的数量为奇数时,则数字视为负,连续出现视为数量为偶数时,则数字 视为正。例如:"A-1BC--12",其中包含数字为-1和12。 举例: str = "A1CD2E33",返回36。 str = "A-1B"-2C--D...原创 2018-09-27 22:26:31 · 224 阅读 · 0 评论 -
《程序员代码面试指南》在有序但含有空的数组中查找字符串
题目:给定一个字符串数组strs[],在strs中有些位置为null,但在不为null的位置上,其字符串是按照字典顺序有小到大依次出现的。再给定一个字符串str返回str在strs中出现的最左的位置。 举例:strs=[null,"a",null,"a",null,"b",null,"c"],str="a",返回1。strs=[nulll,"a",null,&quo原创 2018-10-06 11:47:20 · 353 阅读 · 0 评论 -
《程序员代码面试指南》给定一个整数n 返回从1到n的数字中1出现的次数
题目:给定一个整数n,返回从1到n的数字中1出现的次数。 例如:n=5,1~n为1,2,3,4,5。那么1出现1次所以返回1。n=11,1~n为1,2,3,4,5,6,7,8,9,10,11。那么1出现的次数为1(1,10,11)返回4。import java.util.Scanner;public class Solution1 { public stati...原创 2018-10-14 18:38:50 · 784 阅读 · 0 评论 -
《程序员代码面试指南》判断字符串a和字符串b 是否互为旋转词
题目:如果一个字符串str,把字符串str前面任意的部分挪到后面形成的字符串叫做str的旋转词。比如str="12345"、"23451"、"34512"、和"51234"。给定两个字符串a和b,请判断a和b是否互为旋转词。举例:a="cdab",b="abcd",返回true。a="1ab2",b="ab12",返回false。a原创 2018-09-29 22:28:56 · 340 阅读 · 0 评论 -
《程序员代码面试指南》“之”字形打印矩阵
题目:给定一个矩阵matrix,按照“之”字形打印这个矩阵,例如:1 2 3 45 6 7 89 10 11 12“之”字形打印结果为:1,2,5,9,6,3,4,7,10,11,8,12。 解答:1、上坐标(tR,tC)初始为(0,0),先沿矩阵第一行移动(tC++),当到达第一行最右边的元素时,再沿...原创 2018-10-22 13:58:10 · 362 阅读 · 0 评论 -
《程序员代码面试指南》 整数的二进制表达式中有多少1
题目:给定一个32位整数n,可为0,可为正,也可以为负,返回该整数二进制表达式中1的个数。 解答:最简单解法。整数n每次进行无符号右移一位,检查最右边的bit是否为1来进行统计。 public static int count1(int n){ int res = 0; while (n != 0){ res += n & ...原创 2018-10-20 11:30:10 · 206 阅读 · 0 评论 -
《程序员代码面试指南》 给定一个整型矩阵 matrix 请按照转圈的方式打印它
题目给定一个整型矩阵 matrix ,请按照转圈的方式打印它。 例如:1 2 3 45 6 7 89 10 11 1213 14 15 16 打印结果为:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。 解答:这里介绍一种矩阵处理的方式,该方式不仅...原创 2018-10-20 20:41:21 · 721 阅读 · 0 评论 -
《程序员代码面试指南》将正方形矩阵顺时针转动90°
题目给定一个N×M的矩阵 matrix,把这个矩阵调整为顺时针转动90°后的形式。 例如:1 2 3 45 6 7 89 10 11 1213 14 15 16 顺时针转动90°后为: 13 9 5 114 10 6 ...原创 2018-10-21 12:05:12 · 451 阅读 · 0 评论 -
《程序员代码面试指南》需要排序的最短子数组长度
题目:给定一个无序数组arr,求出需要排序的最短数组长度。例如:arr=[1,5,3,4,2,6,7]返回4,因为只有[5,3,4,2]需要排序。 解答:初始化变量noMinIndex=-1,从右向左遍历,遍历的过程中记录右侧出现的数的最小值,记作min。假设当前数为arr[i],如果arr[i]>min,说明如果要整体有序,min值必然会移到arr[i]的左边。用n...原创 2018-10-24 14:25:25 · 283 阅读 · 0 评论 -
《程序员代码面试指南》在其他数都出现K次的数组中找到只出现一次的数
题目:给定一个整型数组arr和一个大于1的整数K。已知arr中只有1个数出现了1次,其他数都出现了K次,请返回只出现了1次的数。 解答:以下的例子是两个七进制数的无进位相加,即忽略进位的相加,比如:七进制数a:6 4 3 2 6 0 1 七进制数a:3 4 5 0 1 1 1 无进位相加结果:2 1 1 2 0 1 2可以看出,两个七进制的数a和b,在i位上无进位相...原创 2018-11-04 14:36:28 · 478 阅读 · 0 评论 -
《程序员代码面试指南》在其他数都出现偶数次的数组中找到出现奇数次的数
题目:在一个数组中只有一个数出现了一次 其他数出现两次 请找出那个只出现一次的数字 解答:整数n与0异或的结果是n。n与n异或的结果是0。public class GetOnlyOne { public static int getNumber(int[] array){ int flag = 0; for(int i : ar...原创 2018-11-13 16:22:58 · 182 阅读 · 0 评论 -
《程序员代码面试指南》如何仅用递归函数和栈操作逆序一个栈
题目:一个栈依次压入1、2、3、4、5,那么栈顶元素分别为5、4、3、2、1。 将这个栈转置后从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。 解答:本题考查的是栈的操作和递归的函数的设计,我们需要设计两个递归函数。 递归函数一:将栈stack的栈底元素返回并移除(getAndRemoveLastElement)。...原创 2018-11-21 09:27:05 · 276 阅读 · 0 评论 -
《程序员代码面试指南》由两个栈组成的队列
题目:编写 一个类,用两个栈实现队列,支持队列的基本操作(add, pol,peek)。 解答:栈的特点是先进后出,而队列的特点是先进先出。我们用两个栈正好能把顺序反过来实现类似队列的操作。具体的做法是一个栈作为压入栈,在压入数据的时候只往这个栈压入,记为 stackPush;另一个栈只作为弹出栈,在弹出数据时候只从这个栈弹出,记为stackPop。因为数据压入栈的...原创 2018-11-17 18:34:37 · 223 阅读 · 0 评论 -
《程序员代码面试指南》用栈来求解汉诺塔问题
题目:汉诺塔的问题比较经典,这里修改一下游戏规则:现在限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中间。求当塔有N层的时候,打印最优秀移动过程和最优移动总步数。例如:当塔为两层的时候,最上层塔记作1,最下层的塔记作2,则打印:Move 1 from left to midMove 1 from mid to rightMove 2 from...原创 2019-01-07 09:12:58 · 588 阅读 · 3 评论 -
《程序员代码面试指南》第一章:栈与队列
这篇博客将《程序员代码面试指南》的第一章的内容进行一个汇总。1.1:设计一个有getMin()功能的栈1.2:由两个栈组成的队列1.3:如何仅用递归函数和栈操作逆序一个栈1.4:猫狗队列1.5:用一个栈实现另一个栈的排序1.6:用栈来求解汉诺塔问题1.7:生成窗口最大值数组1.8:构造数组的MaxTree1.9:最大子矩阵的大小1.10:最大值减去最小值小于...原创 2019-01-07 19:20:58 · 265 阅读 · 0 评论 -
《程序员代码面试指南》给定一个链表的头结点head 请判断该链表是否为回文结构
题目:给定一个链表的头结点head,请判断该链表是否为回文结构。例如:1->2->1,返回true。1->2->2->,1返回true。15->6->15,返回true。1-2->3,返回false。解答:利用栈结构,从左到右遍历链表,遍历的过程中把每个节点依次压入栈中。因为栈是先进后出的,所以遍历完成后从栈顶到栈的节点值顺序会与原...原创 2018-09-27 01:45:37 · 870 阅读 · 0 评论 -
《程序员代码面试指南》判断字符数组中是否所有字符都只出现一次
题目:给定一个字符类型的数组chas[],判断chas中是否所有的字符都只出现一次。 举例:chas=[‘a’,‘b’,‘c’],返回true;chas=[‘1’,‘2’,‘1’],返回false。 解答:遍历一遍chas,用map记录每种字符出现的情况,这样在遍历的时候发现重复字符的情况,map可以用固定长度的数组实现。 public class IsU...原创 2018-10-03 11:32:50 · 312 阅读 · 0 评论 -
《程序员代码面试指南》字符串的统计字符串
题目:给定一个字符串str,返回str的统计字符串。例如:‘’aaabbadddffc‘’的统计字符串为‘’a_3_b_2_a_1_d_3_f_2_c_1‘’。 解答:1.如果str为空,那么统计字符串不存在。 2.如果str不为空。首先生成String类型的变量res,表示统计字符串,还有整型变量num,代表当前字符的数量。初始时字符串只包含第0个字符(str[0]),同...原创 2018-10-02 16:23:24 · 250 阅读 · 0 评论 -
《程序员代码面试指南》环形单链表的约瑟夫问题
描述:据说著名历史学家 Josephus 有过以下问题:在罗马人占领乔塔帕特后,39 个犹太人与 Josephus 及他的朋友躲到一个洞里面, 39 个犹太人决定宁死也不愿被敌人抓到,于是他们决定了一个自杀的方式,41 个人排成一个圈,由第一个人开始报数,报到 3 的人自杀,然后剩下的人再依次报数,报到三的人自杀,最后剩一个人可以选择自己的命运。这就是著名的约瑟夫问题。现在用环形单链表实现这个自杀...原创 2018-06-02 20:25:04 · 264 阅读 · 0 评论 -
《程序员代码面试指南》用一个栈实现另一个栈的排序
题目: 一个栈中元素类型为整形,现在使用另外一个栈完成对该栈元素的排序,从栈顶到栈底从大到小。解决 思路: 将要排序的栈记作 stack ,申请的辅助栈为 help 。在 stack 上执行 pop 操作 ,弹出的元素记作 cur 。 如果 cur 小于或等于 help 栈顶的元素,则将 cur 直接压入 help; 如果 cur 大于 help栈顶的元...原创 2018-05-27 17:53:57 · 313 阅读 · 0 评论 -
《程序员代码面试指南》打印两个有序链表的公共部分
题目: 给定两个有序链表的头指针 head1 和 head2,打印两个两个链表的公共部分。解决思路: 从两个链表的头结点开始移动; 如果 head1 的值小于 head2,则 head1 往下移动。 如果 head2 的值小于 head1,则 head2 往下移动。 head1 或 head2 有任何一个移动到 null,结束。publi...原创 2018-05-27 19:45:55 · 268 阅读 · 0 评论 -
《程序员代码面试指南》删除链表中间节点和a/b处的节点
题目: 给定链表的头节点 head ,实现删除链表的中间节点的函数。例如: 不删除任何节点; 1 -> 2,删除节点1; 1 -> 2 ->3, 删除节点2; 1 -> 2 ->3 -> 4, 删除节点2; 1 -> 2 ->3 -> 4-> 5,删除节点3; 1 ...原创 2018-05-28 23:50:31 · 142 阅读 · 0 评论 -
《程序员代码面试指南》两个单链表生成相加链表
题目:假设链表中每一个节点的值0~9之间,那么链表整体就可以代表一个整数。 例如:9->3->7,可以代表整数937。给定两个这种链表的头节点 head1 和 head2,请生成代表两个整数相加值的结果链表。例如:链表 1 :9->3->7,链表 2 :6->3,最后生成的结果链表为 1->0->0->0。 方法:1、将两...原创 2018-06-05 20:15:09 · 700 阅读 · 0 评论 -
《程序员代码面试指南》合并两个有序的单链表
题目:给定两个有序单链表头节点 head1 和 head2 请合并两个有序链表,合并后依然有序,并返回合并后的头节点。例如:0->2->3->7->null1->3->5->7->9->null合并后的链表为:0->1->2->3->3->5->7->7-&g原创 2018-06-14 08:48:39 · 318 阅读 · 0 评论 -
《程序员代码面试指南》反转单向链表
题目: 实现单向链表的反转要求:如果链表的长度为 N 时间复杂度要求为 O(N),额外空间复杂度为 O(1)。public class Node{ public int value; public Node next; public Node(int data){ ...原创 2018-06-01 16:44:27 · 206 阅读 · 0 评论 -
《程序员代码面试指南》向有序的环形单链表中插入新节点
题目:一个环形单链表从头节点 head 开始不降序,同时由最后的节点指回头节点。给定这样的一个环形单 链表的头节点 head 和 一个整数 num ,请生成节点值为 num 的新节点,并插入到这个环形链表中,保证调整后的链表依然有序。解答:直接给出时间复杂度为 O(N)、额外空间复杂度为 O(1)的方法。具体过程如下:1、生成节点值为 num 的新节点,记作 node。2、如果...原创 2018-06-11 00:45:22 · 556 阅读 · 0 评论 -
《程序员代码面试指南》按照左右半区的方式重新组合单链表
题目:给定一个单链表的头部节点 head,链表长度为 N,如果 N 为偶数,那么前 N/2 个节点算作左半区,后 N/2 的节点算作右半区;如果 N 为奇数,那么前 N/2 个节点算作左半区,后 N/2 + 1 个节点算作右半区。左半区从左到右依次记为 L1->L2->...,右半区从左到右依次记做 R1->R2->..., 请将链表调整成为 L1->R1->...原创 2018-08-07 23:24:37 · 150 阅读 · 0 评论 -
《程序员代码面试指南》 分别用递归和非递归实现二叉树的先序、中序和后序遍历
题目 用递归和非递归的方式,分别按照二叉树先序、中序和后序打印所有的节点。我们约定:先序遍历顺序为根、左、右;中序遍历顺序为左、根、右;后序遍历顺序为左、右、根。 解答 用递归实现三种遍历是最基本的内容 先序遍历的递归实现 /** * 二叉树先序递归遍历 */ public class Node{ ...原创 2018-09-02 00:24:25 · 411 阅读 · 0 评论 -
《程序员代码面试指南》在单链表中删除指定值的节点
题目:在单链表中删除指定值的节点 方法一:利用一个栈结构。 class Node{ Integer value; public Node next; public Node(Integer data){ this .value = da...原创 2018-09-05 19:21:51 · 266 阅读 · 0 评论 -
《程序员代码面试指南》判断两个字符串是否互为变形词
题目:给定两个字符串 str1 和 str2,如果你str1 和 str2 中出现的字符种类一样且每种字符出现的次数也一样,那么str1 和 str2 互为变形词。请实现函数判断两个字符串是否互为变形词。 举例:str1 = “123”,str2 =“321” 返回“true”str1 = “123”,str2 =“2331” 返回“false” 解答:如果字符串 ...原创 2018-09-05 19:56:29 · 238 阅读 · 0 评论 -
《程序员代码面试指南》给定一个字符串 返回最长无重复子串的长度
题目:给定一个字符串 str,返回 str 最长无重复子串的长度。举例:str = "abcd" 返回 4str = "aabcb",最长无重复子串为"abc",返回3。解答:如果 str 长度为 N,字符编码范围是M,本题可以做到时间复杂度为O(N),额外空间复杂度为O(M)。1.在遍历str之前,先申请几个变量。哈希表 map,key表示某个字符,value为这个字符第一次出现的位...原创 2018-09-23 14:49:27 · 1338 阅读 · 2 评论 -
《程序员代码面试指南》判断t1树是否包含t2树的全部拓扑结构
题目:给定彼此独立的两棵树头结点分别为t1和t2,判断t1树是否包含t2树的全部拓扑结构。t1树包含t2树的全部拓扑结构,所以返回true。解答:如果t1中某棵子树节点的值与t2头节点的值一样,则从这两个头结点开始匹配,匹配的每一步都让t1上的节点跟着t2的节点先序遍历移动,每移动一步,都检查t1的当前节点是否和t2的当前节点值一样。比如,题目中举的例子,t1的节点2与t2的节...原创 2018-10-11 09:51:50 · 348 阅读 · 0 评论 -
《程序员代码面试指南》生成窗口最大值数组
题目:有一个整型数组 arr 和一个大小为 w 的窗口从数组的最左边滑倒最右边,窗口每次向右边划一个位置。例如:数组为 [4,3,5,4,3,3,6,7],窗口大小为3时: [4 3 5] 4 3 3 6 7 窗口的最大值为5 4[3 5 4] 3 3 6 7 窗口的最大值为5 4 3[5 4 3] 3 6 7 窗口的最大值为5 4 3 5[4 3 3] 6 7 窗...原创 2019-01-09 09:45:20 · 218 阅读 · 0 评论