剑指Offer
剑指Offer
Allen Chou
这个作者很懒,什么都没留下…
展开
-
剑指offer Java版 面试题19. 正则表达式匹配
题目描述请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配。测试用例功能测试(模式字符串里包含普通字符、‘.’、‘’;模式字符串和输入字符串匹配/不匹配;“.”这个组合真的是吃屎)特殊输入测试(输入字符串和模式字符是null、空字符串)题目考点考察应聘者对原创 2020-12-19 21:06:12 · 202 阅读 · 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 · 142 阅读 · 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 · 190 阅读 · 0 评论 -
剑指offer Java版 面试题16:数值的整数次方
题目描述实现函数double power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。测试用例把 底数 和 指数 分别设为正数、负数和零。题目考点考察应聘者 思维的全面性。对效率比较高的面试官还会考察应聘者快速做乘方的能力。解题思路全面但不够高效的解法考虑exponent为负数当指数为负数的时候,我们可以先对指数取绝对值,算出次方的结果之后再取倒数。在想到取倒数的时候,我们又要想到对0取倒数的问题,这原创 2020-12-09 13:06:18 · 156 阅读 · 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 · 283 阅读 · 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 · 218 阅读 · 0 评论 -
剑指offer Java版 面试题12:矩阵中的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。例如下面的矩阵包含了一条 bfce 路径。但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。测试用例功能测试(在多行多列的矩阵中存在或者不存在路径)边界值测试(矩阵只有一行或者只有一列;矩阵和原创 2020-11-28 18:49:02 · 281 阅读 · 0 评论 -
剑指offer Java版 面试题11:旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个 非递减 排序的数组的一个旋转,输出旋转数组的最小元素。例如数组 {3, 4, 5, 1, 2} 为 {1, 2, 3, 4, 5} 的一个旋转,该数组的最小值为 1。NOTE:若数组大小为 0,请返回 0。测试用例功能测试(输入的数组是非递减排序数组的一个旋转,数组中有重复的数字或者没有重复的数字)边界值测试(输入的数组是一个非递减排序的数组,只包含一个数字的数组)特殊输入测试(输入空指针)题目考点考察原创 2020-11-28 15:15:14 · 137 阅读 · 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 · 193 阅读 · 0 评论 -
剑指offer Java版 面试题10:斐波那契数列
斐波那契数列写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(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 · 375 阅读 · 0 评论 -
剑指offer Java版 面试题9:用两个栈实现队列
剑指offer面试题9–两个栈实现队列用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。刚开始两个栈都是空的,要进队列,可以将元素压入任何一个栈,不妨就压入stack1中,我们知道元素在栈中是后进先出的,因此要出列需要删除stack1最底部的元素,此时stack2派上用场了,将stack1的元素再压入stack2中,现在元素的排列变成了原来插入的顺序,要出列的元素到了栈顶,要完成出列操作就很方便了。若要继续出列,只要stack2不为空,只需继续从stack2中出栈即原创 2020-11-26 16:09:29 · 205 阅读 · 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 · 145 阅读 · 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 · 117 阅读 · 0 评论 -
剑指Offer Java版 面试题5:替换空格
题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为 "We Are Happy". 则经过替换之后的字符串为 "We%20Are%20Happy"。测试用例输入的字符串包含空格(空格位于字符串的最前面;空格位于字符串的最后面;空间位于字符串的中间;字符串中有连续多个空格)。 输入的字符串没有空格。 特殊输入测试(字符串为空指针;字符串是一个空字符串)题目考点考察应聘者对字符串的编程能力。 考察应聘者分析时间效率的能力、我们要能清晰的分析出两种不同方法的时间原创 2020-11-12 20:28:23 · 128 阅读 · 0 评论 -
剑指Offer Java版 面试题4:二维数组中的查找
题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。例如下面的二维数组就是每行、每列都是递增排序,如果在这个数组中查找数字7,则放回true;如果查找数字5,由于数组不含该数字,则返回false。1 2 8 92 4 6 124 7 10 136 8 11 15测试用例二维数组中包含查找的数字(查找的数字是数组中的最大值和最小值;查找的数字介于数组中的最大值原创 2020-11-12 19:35:53 · 122 阅读 · 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 · 167 阅读 · 0 评论 -
剑指Offer Java版 面试题2: 实现Singleton(单例)模式
题目描述设计一个类,我们只能生成该类的一个实例。题目考点考察应聘者对单例模式的理解 考察应聘者对基础语法(Java)的理解 考察应聘者对多线程编程的理解解题思路使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。Static关键字:先介绍一下static关键字在Java中的应用:在《Java编程思想》P86页有这样一段话: “static方法就是没有this原创 2020-11-11 21:40:32 · 203 阅读 · 0 评论