剑指offer
剑指offer
qxlxi
21届本,后端工程师 (专注于Java、Go、数据库、缓存、消息队列、网络、OS、算法、软件设计、DevOps、云原生、大数据、分布式系统架构设计等)
展开
-
【剑指offer】剑指offer汇总版
文章目录剑指offer汇总3.数组中重复的数字 ★题目描述1.HashSet2.利用下标4.二维数组中的查找 ★1.暴力破解法2.线性查找5.替换空格 ★[面试题05. 替换空格](https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/)迭代6.从尾到头打印链表 ★1.使用栈2.递归法3.头插法【ps】7.重建二叉树 ★8.用两个栈实现队列 ★9.斐波那契数列 ★1.使用递归2.记忆化递归法3.动态规划4.循环求余法10.青蛙跳台阶问题 ★10-2 变原创 2020-08-21 11:23:37 · 1184 阅读 · 0 评论 -
【剑指offer】43.1~n整数中1出现的次数
43.1~n整数中1出现的次数剑指 Offer 43. 1~n整数中1出现的次数难度中等70输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。示例 1:输入:n = 12输出:5示例 2:输入:n = 13输出:6public int countDigitOne(int n) { int res = 0; for(long m = 1 ; m<=n ;原创 2020-08-05 16:58:29 · 330 阅读 · 0 评论 -
【剑指offer】67.把字符串转换成整数
67.把字符串转换成整数面试题67. 把字符串转换成整数难度中等9写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符原创 2020-08-04 13:09:37 · 283 阅读 · 0 评论 -
【剑指offer】10-2 变态跳台阶
10-2 变态跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。变态跳台阶问题,是斐波那契额数列 青蛙跳台阶 跳楼梯问题的变形。假设当前在3台阶,那么可能从0级跳到3台阶 1台阶到3台阶 2台阶到3台阶 3台阶到3台阶。f(3) = f(1)+f(2)+f(3)f(1) = 1f(2) = 2f(3) = 1+2+11.暴力解public int JumpFloorII(int target) { if(tar原创 2020-07-02 14:57:04 · 344 阅读 · 0 评论 -
【剑指offer】14- I. 剪绳子
14- I. 剪绳子面试题14- I. 剪绳子难度中等45给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1示例 2:输入: 10输出: 36原创 2020-05-26 09:59:23 · 262 阅读 · 0 评论 -
【剑指offer】13.机器人的运动范围
13.机器人的运动范围面试题13. 机器人的运动范围难度中等96地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0,0]的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格[35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例 1:输入:m = 2,原创 2020-05-25 19:30:42 · 323 阅读 · 0 评论 -
【剑指offer】12.矩阵中的路径
12.矩阵中的路径面试题12. 矩阵中的路径难度中等72请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[[“a”,“b”,“c”,“e”], [“s”,“f”,“c”,“s”], [“a”,“d”,“e”,“e”]]但矩阵中不包含字符串“abf原创 2020-05-25 18:52:53 · 389 阅读 · 0 评论 -
【剑指offer】61.扑克牌中的顺子
61.扑克牌中的顺子面试题61. 扑克牌中的顺子难度简单24从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为0 ,可以看成任意数字。A 不能视为 14。示例 1:输入: [1,2,3,4,5]输出: True示例 2:输入: [0,0,1,2,5]输出: True /* a.最大元素-nums[joker] 小于 5 不可以匹配,或者当前和后一个元素相等 不能成顺子原创 2020-05-24 17:28:13 · 444 阅读 · 0 评论 -
【剑指offer】47.礼物的最大价值
47.礼物的最大价值面试题47. 礼物的最大价值难度中等34在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入: [ [1,3,1], [1,5,1], [4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物//采用dp 如果是递归的话原创 2020-05-18 21:28:19 · 307 阅读 · 0 评论 -
【剑指offer】49.丑数
49.丑数面试题49. 丑数难度中等26我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。说明:1 是丑数。n 不超过1690。//dp问题 //思路 我们知道丑数是可以被2 or 3 or 5 连续整除的。如果==1 就是丑数// 初始化 dp[0] = 1; 1*2=2 1原创 2020-05-17 17:56:21 · 300 阅读 · 0 评论 -
【剑指offer】64.求1+2+…+n
64.求1+2+…+n面试题64. 求1+2+…+n难度中等66求 1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例 1:输入: n = 3输出: 6示例 2:输入: n = 9输出: 45 public int sumNums(int n) { int sum = n; boolean b = (n > 0) &&原创 2020-05-14 16:32:22 · 283 阅读 · 0 评论 -
【剑指offer】58 - II. 左旋转字符串
58 - II. 左旋转字符串面试题58 - II. 左旋转字符串难度简单24字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = "abcdefg", k = 2输出: "cdefgab"示例 2:输入: s = "lrloseumgh", k = 6输出: "umghlrlose"面试题58 - II. 左旋转.原创 2020-05-13 08:14:14 · 339 阅读 · 0 评论 -
【剑指offer】58 - I. 翻转单词顺序
58 - I. 翻转单词顺序面试题58 - I. 翻转单词顺序难度简单13输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am astudent. “,则输出"student. a am I”。示例 1:输入: "the sky is blue"输出: "blue is sky the"示例 2:输入: " hello world! "输出: "world! hello"解释: 输入字符串可以在前面或者原创 2020-05-11 18:08:37 · 359 阅读 · 0 评论 -
【剑指offer】57 - II. 和为s的连续正数序列
57 - II. 和为s的连续正数序列面试题57 - II. 和为s的连续正数序列难度简单98输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]双指针//双指针//这类属于窗口问题,i j分别指向前后原创 2020-05-09 21:52:06 · 528 阅读 · 0 评论 -
【剑指offer】57.和为s的两个数字
57.和为s的两个数字面试题57. 和为s的两个数字难度简单18输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], targe...原创 2020-05-08 10:40:40 · 225 阅读 · 0 评论 -
【剑指offer】 66.构建乘积数组
66.构建乘积数组面试题66. 构建乘积数组难度简单16给定一个数组 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]。不能使用除法。示例:输入: [1,2,3,4,5]输出: [120,60,40,30,24]public int[] constructArr...原创 2020-05-07 12:31:51 · 280 阅读 · 0 评论 -
【剑指offer】65.不用加减乘除做加法
65.不用加减乘除做加法面试题65. 不用加减乘除做加法难度简单26写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。示例:输入: a = 1, b = 1输出: 2/** 可以将元素进行划分 相加 和 进位操作。^ 相加 &进位*/public int add(int a, int b) { in...原创 2020-05-07 12:06:30 · 305 阅读 · 0 评论 -
【剑指offer】59 - ||队列的最大值
59 - ||队列的最大值面试题59 - II. 队列的最大值难度中等92请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front的均摊时间复杂度都是O(1)。若队列为空,pop_front 和 max_value 需要返回 -1示例 1:输入: ["MaxQueue","push_back","pu...原创 2020-05-06 18:17:48 · 300 阅读 · 0 评论 -
【剑指offer】55.-II 平衡二叉树
55.-II 平衡二叉树面试题55 - II. 平衡二叉树难度简单19输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二...原创 2020-05-05 16:52:53 · 314 阅读 · 0 评论 -
【剑指offer】42.连续子数组的最大和
42.连续子数组的最大和面试题42. 连续子数组的最大和难度简单42输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。提示:1 <= ar...原创 2020-05-05 16:35:44 · 297 阅读 · 0 评论 -
【剑指offer】54.二叉树的第K大节点
54.二叉树的第K大节点面试题54. 二叉搜索树的第k大节点难度简单21给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 4示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 3 5 /...原创 2020-05-05 16:33:43 · 267 阅读 · 0 评论 -
【剑指offer】38.字符串的排列
38.字符串的排列面试题38. 字符串的排列难度中等38输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = "abc"输出:["abc","acb","bac","bca","cab","cba"]回溯//dfs time :O(N!) space : O(N^2) List<St...转载 2020-05-04 20:46:01 · 238 阅读 · 0 评论 -
【剑指offer】59.-1 滑动窗口的最大值
59.-1 滑动窗口的最大值面试题59 - I. 滑动窗口的最大值难度简单41给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值--------------- ...原创 2020-05-03 21:49:14 · 246 阅读 · 0 评论 -
【剑指offer】50.第一个出现一次的字符
50.第一个出现一次的字符面试题50. 第一个只出现一次的字符难度简单14在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。示例:s = "abaccdeff"返回 "b"s = "" 返回 " "1.哈希表/**1.哈希表 a.使用hashmap来存储 key为字符,value为true or false 1)true -> 该...原创 2020-05-01 09:23:43 · 243 阅读 · 0 评论 -
【剑指offer】52.两个链表的第一个公共节点
52.两个链表的第一个公共节点面试题52. 两个链表的第一个公共节点难度简单37输入两个链表,找出它们的第一个公共节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the ...原创 2020-04-30 15:33:20 · 299 阅读 · 0 评论 -
【剑指offer】53 - II. 0~n-1中缺失的数字
53 - II. 0~n-1中缺失的数字面试题53 - II. 0~n-1中缺失的数字难度简单16一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 8...原创 2020-04-30 14:06:50 · 348 阅读 · 0 评论 -
【剑指offer】53.在排序数组中查找数字 I
53.在排序数组中查找数字 I面试题53 - I. 在排序数组中查找数字 I难度简单23统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 01.二分查找//search问题 先O(n)>二分...原创 2020-04-30 13:49:50 · 359 阅读 · 1 评论 -
【剑指offer】40.最小的K个数
40.最小的K个数面试题40. 最小的k个数难度简单76输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 1:输入:arr = [3,2,1], k = 2输出:[1,2] 或者 [2,1]示例 2:输入:arr = [0,1,2,1], k = 1输出:[0]Top(k) 问题...原创 2020-04-28 19:06:49 · 319 阅读 · 0 评论 -
【剑指offer】39.数组中出现次数超过一半的数字
39.数组中出现次数超过一半的数字面试题39. 数组中出现次数超过一半的数字难度简单19数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 21.哈希表 //哈希表 //1.将数组中元素作为key value为...原创 2020-04-28 17:28:25 · 273 阅读 · 0 评论 -
【剑指offer】36. 二叉搜索树与双向链表
36. 二叉搜索树与双向链表难度中等31输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。为了让您更好地理解问题,以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。下图展示了上面的...原创 2020-04-28 15:50:10 · 279 阅读 · 0 评论 -
【剑指offer】35.复杂链表的复制
35.复杂链表的复制面试题35. 复杂链表的复制难度中等33请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个random 指针指向链表中的任意节点或者 null。示例 1:输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13...原创 2020-04-23 18:03:30 · 346 阅读 · 0 评论 -
【剑指offer】34.二叉树中和为某一值的路径
34.二叉树中和为某一值的路径面试题34. 二叉树中和为某一值的路径难度中等27输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 ...原创 2020-04-22 21:55:15 · 327 阅读 · 0 评论 -
【剑指offer】33.二叉搜索树的后序遍历序列
33.二叉搜索树的后序遍历序列面试题33. 二叉搜索树的后序遍历序列难度中等39输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树: 5 / \ 2 6 / \ 1 3示例 1:输入: [1,6,3,2,5]输出: fals...原创 2020-04-22 18:26:45 · 316 阅读 · 0 评论 -
【剑指offer】32-3 从上到下打印二叉树 III
32-3 从上到下打印二叉树 III面试题32 - III. 从上到下打印二叉树 III难度中等15请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 1...原创 2020-04-21 21:49:35 · 268 阅读 · 0 评论 -
【剑指offer】32-2 从上到下打印二叉树 II
32-2 从上到下打印二叉树 II面试题32 - II. 从上到下打印二叉树 II难度简单17从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [...原创 2020-04-21 10:50:20 · 256 阅读 · 0 评论 -
【剑指offer】32-1 从上到下打印二叉树
32-1 从上到下打印二叉树面试题32 - I. 从上到下打印二叉树难度中等10从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回:[3,9,20,15,7]th:一个队列存储遍历的节点,先存储root结点...原创 2020-04-20 18:18:54 · 318 阅读 · 0 评论 -
【剑指offer】31.栈的压入、弹出序列
31.栈的压入、弹出序列面试题31. 栈的压入、弹出序列难度中等27输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列{1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2}就不可能是该压栈序列的弹出序列。示例 1:输入:pushed ...原创 2020-04-20 17:46:02 · 481 阅读 · 0 评论 -
【剑指offer】30.包含min函数的栈
30.包含min函数的栈面试题30. 包含min函数的栈难度简单12定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.p...原创 2020-04-08 10:44:35 · 309 阅读 · 0 评论 -
【剑指offer】29.顺时针打印矩阵
29.顺时针打印矩阵面试题29. 顺时针打印矩阵难度简单25输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8...原创 2020-04-08 10:23:26 · 265 阅读 · 0 评论 -
【剑指offer】28.对称的二叉树
28.对称的二叉树面试题28. 对称的二叉树难度简单25请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:1 / \ 2 2 \ ...原创 2020-04-07 10:35:58 · 280 阅读 · 0 评论