剑指offer
刷题
十七天
这个作者很懒,什么都没留下…
展开
-
剑指 Offer II 026. 重排链表
给定一个单链表 L 的头节点 head ,单链表 L 表示为:L0→ L1→ … → Ln-1→ Ln请将其重新排列后变为:L0→Ln→L1→Ln-1→L2→Ln-2→ …不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/LGjMqU著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。class Solution {...原创 2021-09-10 15:36:15 · 118 阅读 · 0 评论 -
剑指 Offer 53 - II. 0~n-1中缺失的数字
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。剑指 Offer 53 - II. 0~n-1中缺失的数字 - 力扣(LeetCode) (leetcode-cn.com)...原创 2021-06-11 22:34:16 · 54 阅读 · 0 评论 -
剑指 Offer 53 - I. 在排序数组中查找数字 I
统计一个数字在排序数组中出现的次数。剑指 Offer 53 - I. 在排序数组中查找数字 I - 力扣(LeetCode) (leetcode-cn.com)原创 2021-06-11 22:31:15 · 80 阅读 · 0 评论 -
剑指 Offer 52. 两个链表的第一个公共节点
输入两个链表,找出它们的第一个公共节点。剑指 Offer 52. 两个链表的第一个公共节点 - 力扣(LeetCode) (leetcode-cn.com)原创 2021-06-11 22:28:59 · 63 阅读 · 0 评论 -
剑指 Offer 51. 数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。剑指 Offer 51. 数组中的逆序对 - 力扣(LeetCode) (leetcode-cn.com)...原创 2021-06-11 21:19:47 · 101 阅读 · 0 评论 -
剑指 Offer 50. 第一个只出现一次的字符
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。剑指 Offer 50. 第一个只出现一次的字符 - 力扣(LeetCode) (leetcode-cn.com)原创 2021-06-11 21:14:18 · 135 阅读 · 0 评论 -
剑指 Offer 49. 丑数
我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。class Solution { public int nthUglyNumber(int n) { if(n == 0){ return 0; } int[] arr = new int[n]; arr[0] = 1; int p1 = 0; int p2 .原创 2021-06-11 21:12:19 · 102 阅读 · 0 评论 -
剑指 Offer 48. 最长不含重复字符的子字符串
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。剑指 Offer 48. 最长不含重复字符的子字符串 - 力扣(LeetCode) (leetcode-cn.com)class Solution { public int lengthOfLongestSubstring(String s) { if(s == null || s.length() == 0){ return 0; } in原创 2021-06-11 21:06:32 · 45 阅读 · 0 评论 -
剑指 Offer 47. 礼物的最大价值
在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?剑指 Offer 47. 礼物的最大价值 - 力扣(LeetCode) (leetcode-cn.com)...原创 2021-06-11 20:56:45 · 60 阅读 · 0 评论 -
剑指 Offer 46. 把数字翻译成字符串
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。...原创 2021-06-11 20:49:46 · 90 阅读 · 0 评论 -
剑指 Offer 45. 把数组排成最小的数
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。剑指 Offer 45. 把数组排成最小的数 - 力扣(LeetCode) (leetcode-cn.com)原创 2021-06-11 20:43:17 · 57 阅读 · 0 评论 -
剑指 Offer 44. 数字序列中某一位的数字
数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。原创 2021-06-06 22:11:41 · 47 阅读 · 0 评论 -
剑指 Offer 43. 1~n 整数中 1 出现的次数
输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。原创 2021-06-06 22:08:33 · 80 阅读 · 0 评论 -
剑指 Offer 42. 连续子数组的最大和
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。剑指 Offer 42. 连续子数组的最大和 - 力扣(LeetCode) (leetcode-cn.com)原创 2021-06-05 15:28:30 · 50 阅读 · 0 评论 -
剑指 Offer 41. 数据流中的中位数
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。...原创 2021-06-05 15:22:47 · 70 阅读 · 0 评论 -
剑指 Offer 40. 最小的k个数
输入整数数组arr,找出其中最小的k个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。原创 2021-06-05 15:06:42 · 47 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。剑指 Offer 39. 数组中出现次数超过一半的数字 - 力扣(LeetCode) (leetcode-cn.com)...原创 2021-06-03 13:30:18 · 108 阅读 · 0 评论 -
剑指 Offer 38. 字符串的排列
输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。剑指 Offer 38. 字符串的排列 - 力扣(LeetCode) (leetcode-cn.com)原创 2021-06-03 13:23:40 · 49 阅读 · 0 评论 -
剑指 Offer 37. 序列化二叉树
请实现两个函数,分别用来序列化和反序列化二叉树。剑指 Offer 37. 序列化二叉树 - 力扣(LeetCode) (leetcode-cn.com)原创 2021-06-03 13:14:47 · 80 阅读 · 0 评论 -
剑指 Offer 36. 二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。class Solution { public Node treeToDoublyList(Node root) { if(root == null){ return null; } infix(root); pre.right = head; head.left = .原创 2021-06-03 13:06:26 · 69 阅读 · 0 评论 -
剑指 Offer 35. 复杂链表的复制
请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。原创 2021-06-03 13:00:37 · 41 阅读 · 0 评论 -
剑指 Offer 34. 二叉树中和为某一值的路径
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。剑指 Offer 34. 二叉树中和为某一值的路径 - 力扣(LeetCode) (leetcode-cn.com)...原创 2021-06-01 15:30:56 · 47 阅读 · 0 评论 -
剑指 Offer 33. 二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。剑指 Offer 33. 二叉搜索树的后序遍历序列 - 力扣(LeetCode) (leetcode-cn.com)...原创 2021-06-03 13:32:23 · 52 阅读 · 0 评论 -
剑指 Offer 32 - III. 从上到下打印二叉树 III
剑指 Offer 32 - III. 从上到下打印二叉树 III请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。//class Solution { public List<List<Integer>> levelOrder(TreeNode root) { if(root == null){ return new Array原创 2021-05-30 12:40:44 · 45 阅读 · 0 评论 -
剑指 Offer 32 - II. 从上到下打印二叉树 II
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。剑指 Offer 32 - II. 从上到下打印二叉树 II - 力扣(LeetCode) (leetcode-cn.com)原创 2021-05-30 12:31:51 · 67 阅读 · 0 评论 -
剑指 Offer 32 - I. 从上到下打印二叉树
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。剑指 Offer 32 - I. 从上到下打印二叉树 - 力扣(LeetCode) (leetcode-cn.com)原创 2021-05-30 12:27:59 · 48 阅读 · 0 评论 -
剑指 Offer 31. 栈的压入、弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。...原创 2021-05-28 20:24:04 · 72 阅读 · 0 评论 -
剑指 Offer 30. 包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。class MinStack { Stack<Integer> s1; Stack<Integer> s2;//辅助栈,存储非严格降序元素,即当前s1中的最小元素(可重复) /** initialize your data structure here. */ public MinStack() {原创 2021-05-28 20:07:27 · 33 阅读 · 0 评论 -
剑指 Offer 29. 顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。class Solution { public int[] spiralOrder(int[][] matrix) { if(matrix.length == 0){ return new int[0]; } int m = matrix.length; int n = matrix[0].length; int num = m原创 2021-05-28 19:45:12 · 51 阅读 · 0 评论 -
剑指 Offer 28. 对称的二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。//递归判断处于对称位置的两棵子树结构是否对称,对称需要满足俩根节点值相等,一颗树的左子树与另一棵树的右子树对称class Solution { public boolean isSymmetric(TreeNode root) { if(root == null){ return true; } return isTwoTre原创 2021-05-28 17:01:38 · 52 阅读 · 0 评论 -
剑指 Offer 27. 二叉树的镜像
请完成一个函数,输入一个二叉树,该函数输出它的镜像。剑指 Offer 27. 二叉树的镜像 - 力扣(LeetCode) (leetcode-cn.com)原创 2021-05-28 16:25:27 · 40 阅读 · 0 评论 -
剑指 Offer 26. 树的子结构
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。原创 2021-05-28 15:26:50 · 41 阅读 · 0 评论 -
剑指 Offer 25. 合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。//递归解法class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1 == null){ return l2; } if(l2 == null){ return l1; } if(l1.v原创 2021-05-27 21:17:21 · 62 阅读 · 0 评论 -
剑指 Offer 24. 反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。剑指 Offer 24. 反转链表 - 力扣(LeetCode) (leetcode-cn.com)//新建一个newHead,每次从原链表上取下头结点,插入到newHead的后面,原链表为空的时候反转完成class Solution { public ListNode reverseList(ListNode head) { ListNode newHead = new ListNode();原创 2021-05-27 20:48:42 · 52 阅读 · 0 评论 -
剑指 Offer 23. 链表中环的入口结点
给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。链接:https://leetcode-cn.com/problems/linked-list-cycle-ii//快慢指针:快慢指针都指向head,快指针每次走两步,慢指针每次走一步..原创 2021-05-27 20:48:28 · 64 阅读 · 0 评论 -
剑指 Offer 22. 链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点.//快慢指针,快慢指针同时指向head,快指针先走k步,然后快慢指针同时向后移动,当快指针指向null的时候,慢指针指向倒数第k个结点class Solution { public ListNode getKthFromEnd(ListNode原创 2021-05-27 20:48:05 · 41 阅读 · 0 评论 -
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 - 力扣(LeetCode) (leetcode-cn.com)//首尾双指针class Solution { public int[] exchange(int[] nums) { int i = 0; int j = nums.length - 1; int tem原创 2021-05-27 20:47:42 · 38 阅读 · 0 评论 -
剑指 Offer 20. 表示数值的字符串
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。数值(按顺序)可以分成以下几个部分:若干空格一个 小数 或者 整数(可选)一个 'e' 或 'E' ,后面跟着一个 整数若干空格小数(按顺序)可以分成以下几个部分:(可选)一个符号字符('+' 或 '-')下述格式之一:至少一位数字,后面跟着一个点 '.'至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字一个点 '.' ,后面跟着至少一位数字整数(按顺序)可以分成以下几个部分:(可...原创 2021-05-27 20:47:02 · 52 阅读 · 0 评论 -
剑指 Offer 18. 删除链表的节点
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。剑指 Offer 18. 删除链表的节点 - 力扣(LeetCode) (leetcode-cn.com)class Solution { public ListNode deleteNode(ListNode head, int val) { if(head.val == val){ head = head.next; return原创 2021-05-26 21:24:59 · 30 阅读 · 0 评论 -
剑指 Offer 19. 正则表达式匹配
请实现一个函数用来匹配包含'. '和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"和"ab*a"均不匹配。思路:假设字符串s当前下标为i,模式串p当前下标为j,当p[j + 1] != '*'时, 如果s[i] = p[j],i++,j++,继续进行匹配,s[i] != p[j]就直接返回false;假如p[j原创 2021-05-25 17:00:54 · 45 阅读 · 0 评论