剑指Offer
剑指Offer
Allen Chou
这个作者很懒,什么都没留下…
展开
-
剑指offer Java版 面试题19. 正则表达式匹配
题目描述 请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配。 测试用例 功能测试(模式字符串里包含普通字符、‘.’、‘’;模式字符串和输入字符串匹配/不匹配;“.”这个组合真的是吃屎) 特殊输入测试(输入字符串和模式字符是null、空字符串) 题目考点 考察应聘者对原创 2020-12-19 21:06:12 · 182 阅读 · 1 评论 -
剑指offer Java版 面试题18. 删除链表的节点
题目描述 在 O(1) 时间内删除链表节点。在给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。 链表节点与函数定义如下: public class ListNode { int val; ListNode next = null; } void deleteNode(ListNode head, ListNode toBeDeleted); 测试用例 功能测试(从有多个节点的链表的中间删除一个节点;从有多个节点的链表中删除头节点;从有多个节点的链表中删除尾节点原创 2020-12-13 11:44:09 · 132 阅读 · 0 评论 -
剑指offer Java版 面试题17:打印从 1 到最大的 n 位数
题目描述 输入数字 n,按顺序打印出从 1 最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数即 999。 测试用例 功能测试(输入1、2、3…) 特殊输入测试(输入-1、0) 题目考点 考察应聘者解决大数问题的能力。面试官出这道题的时候,他期望应聘者能意识到这是一个大数问题,同时还期待应聘者能定义合适的数据结构表示方式来解决大数问题。 解题思路: 题目要求打印 “从 11 至最大的 n 位数的列表” ,因此需考虑以下两个问题: 最大的 n位数(记为 end)和位原创 2020-12-10 12:58:30 · 178 阅读 · 0 评论 -
剑指offer Java版 面试题16:数值的整数次方
题目描述 实现函数double power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。 测试用例 把 底数 和 指数 分别设为正数、负数和零。 题目考点 考察应聘者 思维的全面性。 对效率比较高的面试官还会考察应聘者快速做乘方的能力。 解题思路 全面但不够高效的解法 考虑exponent为负数 当指数为负数的时候,我们可以先对指数取绝对值,算出次方的结果之后再取倒数。在想到取倒数的时候,我们又要想到对0取倒数的问题,这原创 2020-12-09 13:06:18 · 148 阅读 · 0 评论 -
剑指offer Java版 面试题14:剪绳子问题
题目描述 给你一根长度为 n 的绳子,请把绳子减成 m 段(m、n都是整数,n > 1 并且 m >1),每段绳子的长度记为k[0], k[1],…,k[m]。请问k[0]*k[1]k[2]…*k[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成的长度为2、3、3三段,此时得到的最大乘积是18。 测试用例 功能测试(绳子的初始长度大于5) 边界值测试(绳子的初始长度分别为0、1、2、3、4) 题目考点 考察应聘者的抽象建模能力。应聘者需要把一个具体的场景抽象成一个能够用动态原创 2020-12-02 20:10:45 · 270 阅读 · 0 评论 -
剑指offer Java版 面试题13:机器人的运动范围
题目描述 地上有一个 m 行和 n 列的方格。一个机器人从坐标 (0, 0) 的格子开始移动,它每次可以向左、右、上、下四个方向移动一格,但是不能进入行坐标和列坐标的 数位之和 大于 k 的格子。例如,当 k 为 18 时,机器人能够进入方格(35, 37),因为 3+5+3+7=18。但是,它不能进入方格(35, 38),因为 3+5+3+8=19。请问该机器人能够达到多少个格子? 测试用例 功能测试(方格为多行多列;k为正数) 边界值测试(方格只有一行或者只有一列;k等于0) 特殊输入测试(k为负数)原创 2020-12-02 11:31:01 · 205 阅读 · 0 评论 -
剑指offer Java版 面试题12:矩阵中的路径
题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如下面的矩阵包含了一条 bfce 路径。但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。 测试用例 功能测试(在多行多列的矩阵中存在或者不存在路径) 边界值测试(矩阵只有一行或者只有一列;矩阵和原创 2020-11-28 18:49:02 · 264 阅读 · 0 评论 -
剑指offer Java版 面试题11:旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个 非递减 排序的数组的一个旋转,输出旋转数组的最小元素。例如数组 {3, 4, 5, 1, 2} 为 {1, 2, 3, 4, 5} 的一个旋转,该数组的最小值为 1。 NOTE:若数组大小为 0,请返回 0。 测试用例 功能测试(输入的数组是非递减排序数组的一个旋转,数组中有重复的数字或者没有重复的数字) 边界值测试(输入的数组是一个非递减排序的数组,只包含一个数字的数组) 特殊输入测试(输入空指针) 题目考点 考察原创 2020-11-28 15:15:14 · 124 阅读 · 0 评论 -
剑指offer Java版 面试题10_2:青蛙跳台阶问题
青蛙跳台阶问题 解题思路: 此类求 多少种可能性 的题目一般都有 递推性质 ,即 f(n) 和 f(n-1)…f(1)之间是有联系的。 设跳上 n 级台阶有 f(n) 种跳法。在所有跳法中,青蛙的最后一步只有两种情况: 跳上 1 级或 2 级台阶。 当为 1 级台阶: 剩 n-1个台阶,此情况共有 f(n-1) 种跳法; 当为 2 级台阶: 剩 n-2 个台阶,此情况共有 f(n-2) 种跳法。 f(n) 为以上两种情况之和,即 f(n)=f(n−1)+f(n−2)f(n)=f(n-1)+f(n-2原创 2020-11-26 17:22:09 · 181 阅读 · 0 评论 -
剑指offer Java版 面试题10:斐波那契数列
斐波那契数列 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 解题思路: 斐波那契数列的定义是f(n+1)=f(n)+f(n−1)f(n+1) =原创 2020-11-26 17:07:00 · 358 阅读 · 0 评论 -
剑指offer Java版 面试题9:用两个栈实现队列
剑指offer面试题9–两个栈实现队列 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 刚开始两个栈都是空的,要进队列,可以将元素压入任何一个栈,不妨就压入stack1中,我们知道元素在栈中是后进先出的,因此要出列需要删除stack1最底部的元素,此时stack2派上用场了,将stack1的元素再压入stack2中,现在元素的排列变成了原来插入的顺序,要出列的元素到了栈顶,要完成出列操作就很方便了。若要继续出列,只要stack2不为空,只需继续从stack2中出栈即原创 2020-11-26 16:09:29 · 194 阅读 · 0 评论 -
剑指Offer Java版 面试题7:重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如前序遍历序列 {1, 2, 4, 7, 3, 5, 6, 8} 和中序遍历序列 {4, 7, 2, 1, 5, 3, 8, 6} 二叉树的节点的定义如下: package com.offer._7; /** * @author :jhys * @date :Created in 2020/11/24 12:25 * @Description : */ public class原创 2020-11-24 13:01:03 · 136 阅读 · 0 评论 -
剑指Offer Java版 面试题6:从尾到头打印链表
题目描述 输入链表的第一个节点,从尾到头反过来打印出每个结点的值。 链表节点定义如下: public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } ListNode(){} } 测试用例 功能测试(输入的链表有多个节点;输入的链表只有一个节点)。 特殊输入测试(输入的链表头节点为空) 题目考点 考查应聘者对单向原创 2020-11-12 21:49:59 · 107 阅读 · 0 评论 -
剑指Offer Java版 面试题5:替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为 "We Are Happy". 则经过替换之后的字符串为 "We%20Are%20Happy"。 测试用例 输入的字符串包含空格(空格位于字符串的最前面;空格位于字符串的最后面;空间位于字符串的中间;字符串中有连续多个空格)。 输入的字符串没有空格。 特殊输入测试(字符串为空指针;字符串是一个空字符串) 题目考点 考察应聘者对字符串的编程能力。 考察应聘者分析时间效率的能力、我们要能清晰的分析出两种不同方法的时间原创 2020-11-12 20:28:23 · 117 阅读 · 0 评论 -
剑指Offer Java版 面试题4:二维数组中的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 例如下面的二维数组就是每行、每列都是递增排序,如果在这个数组中查找数字7,则放回true;如果查找数字5,由于数组不含该数字,则返回false。 1 2 8 9 2 4 6 12 4 7 10 13 6 8 11 15 测试用例 二维数组中包含查找的数字(查找的数字是数组中的最大值和最小值;查找的数字介于数组中的最大值原创 2020-11-12 19:35:53 · 108 阅读 · 0 评论 -
剑指Offer Java版 面试题3:数组中重复的数字
题目描述 找出数组中重复的数字。 在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为 7 的数组 {2, 3, 1, 0, 2, 5, 3},那么对应的输出是第一个重复的数字 2 或 3 。 测试用例 长度为n的数组包含一个或多个重复的数字。 数组中不包含重复的数字。 无效输入测试用例(输入数组为空;程度为n的数组中包含 0 到 n-1之外的数字.原创 2020-11-12 17:22:06 · 159 阅读 · 0 评论 -
剑指Offer Java版 面试题2: 实现Singleton(单例)模式
题目描述 设计一个类,我们只能生成该类的一个实例。 题目考点 考察应聘者对单例模式的理解 考察应聘者对基础语法(Java)的理解 考察应聘者对多线程编程的理解 解题思路 使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。 私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。 Static关键字: 先介绍一下static关键字在Java中的应用: 在《Java编程思想》P86页有这样一段话: “static方法就是没有this原创 2020-11-11 21:40:32 · 192 阅读 · 0 评论