剑指offer刷题实录
我要成为罗宾姐姐
仿生人会梦见他养的电子豚鼠吗?
展开
-
剑指offer JZ56 删除链表中重复的结点
题目链接:JZ56 删除链表中重复的结点本题思路:/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode deleteDuplication(ListNode pHead) { // 0或1个结点原创 2021-05-21 13:04:02 · 98 阅读 · 0 评论 -
剑指offer JZ55 链表中环的入口结点
题目链接:JZ55 链表中环的入口结点本题思路:/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/import java.util.*;public class Solution { public ListNode EntryNodeOfLoop(ListNode pHead) {原创 2021-05-21 13:02:46 · 90 阅读 · 0 评论 -
剑指offer JZ54 字符流中第一个不重复的字符
题目链接:JZ54 字符流中第一个不重复的字符本题思路:import java.util.*;public class Solution { // 无序 可重复 // Map<Character, Integer> map = new HashMap<>(); // HashMap 数据位置会变化 Map<Character, Integer> map = new LinkedHashMap<>(); // Link原创 2021-05-20 16:01:19 · 63 阅读 · 0 评论 -
剑指offer JZ53 表示数值的字符串
题目链接:JZ53 表示数值的字符串本题思路:import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param str string字符串 * @return bool布尔型 */ public boolean isNumeric (String str) { // 难点原创 2021-05-20 16:00:13 · 108 阅读 · 0 评论 -
剑指offer JZ52 正则表达式匹配
题目链接:JZ52 正则表达式匹配本题思路:大佬解答:动态规划,清晰图解动态规划详细注释import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param str string字符串 * @param pattern string字符串 * @return bool布尔型 */原创 2021-05-19 21:59:29 · 71 阅读 · 0 评论 -
剑指offer JZ51 构建乘积数组
题目链接:JZ51 构建乘积数组本题思路:import java.util.ArrayList;public class Solution { public int[] multiply(int[] A) { // b[i]的值是数组a中除了下标i以外的元素的积 int[] B = new int[A.length]; int temp = 0; for(int i = 0; i < A.length; i++) {原创 2021-05-19 08:47:07 · 87 阅读 · 0 评论 -
剑指offer JZ50 数组中重复的数字
题目链接:JZ50 数组中重复的数字本题思路:import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param numbers int整型一维数组 * @return int整型 */ public int duplicate (int[] numbers) { // w原创 2021-05-18 20:23:27 · 79 阅读 · 0 评论 -
剑指offer JZ49 把字符串转换成整数
题目链接:JZ49 把字符串转换成整数本题思路:public class Solution { public int StrToInt(String str) { int res = 0; int sign = 0; for(int i = 0; i < str.length(); i++) { if(str.charAt(i) >= '0' && str.charAt(i) <= '9'原创 2021-05-18 20:20:42 · 76 阅读 · 0 评论 -
剑指offer JZ48 不用加减乘除做加法
题目链接:JZ48 不用加减乘除做加法本题思路:public class Solution { public int Add(int num1,int num2) { // 位运算 把num1+num2 转化为a⊕b + a&b<<1(和sum = 非进位和n + 进位c) // 以9+2为例 sum=1+10 // 四种组合 00 01 10 11 // 无进位:00 01 10相加结果和异原创 2021-05-16 15:57:57 · 57 阅读 · 0 评论 -
剑指offer JZ47 求1+2+3+...+n
题目链接:JZ47 求1+2+3+…+n本题思路:public class Solution { int res = 0; public int Sum_Solution(int n) { /* 递归 if(n == 1) return 1; n += sumNums(n - 1); return n; */ // 用&&原创 2021-05-16 15:56:26 · 73 阅读 · 0 评论 -
剑指offer JZ46 孩子们的游戏(圆圈中最后剩下的数)
题目链接:JZ46 孩子们的游戏(圆圈中最后剩下的数)本题思路:约瑟夫环——公式法(递推公式)public class Solution { public int LastRemaining_Solution(int n, int m) { // 约瑟夫环 if(n <= 0 || m <= 0) return -1; int ans = 0; for(int i = 2;原创 2021-05-16 15:19:09 · 146 阅读 · 0 评论 -
剑指offer JZ45 扑克牌顺子
题目链接:JZ45 扑克牌顺子本题思路:import java.util.*;public class Solution { public boolean IsContinuous(int [] numbers) { // 构成顺子判断条件 max - min < 5 Set<Integer> set = new HashSet<>(); // Set 无序 不包含重复元素 int min = 13, max =原创 2021-05-15 20:13:33 · 88 阅读 · 0 评论 -
剑指offer JZ44 翻转单词序列
题目链接:JZ44 翻转单词序列本题思路:public class Solution { public String ReverseSentence(String str) { // 双指针 StringBuilder res = new StringBuilder(); int i = str.length()-1, j = i; // 从后向前划分单词 此时i, j指向最后一个字母 while(i >=原创 2021-05-15 19:34:06 · 110 阅读 · 0 评论 -
剑指offer JZ43 左旋转字符串
题目链接:JZ43 左旋转字符串本题思路:public class Solution { public String LeftRotateString(String str,int n) { // 若n越界 则直接返回空字符串 String res = ""; if(n <= str.length()) { // 拼接右半部分 for(int i = n; i < str.l原创 2021-05-15 18:36:53 · 135 阅读 · 0 评论 -
剑指offer JZ42 和为S的两个数字
题目链接:JZ42 和为S的两个数字本题思路:import java.util.ArrayList;public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { // 对撞双指针 ArrayList<Integer> result = new ArrayList<Integer>();原创 2021-05-14 17:54:39 · 74 阅读 · 0 评论 -
剑指offer JZ41 和为S的连续正数序列
题目链接:JZ41 和为S的连续正数序列本题思路:import java.util.ArrayList;public class Solution { public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) { // 滑动窗口(双指针) ArrayList<ArrayList<Integer> > result = new Arr原创 2021-05-14 17:22:59 · 112 阅读 · 0 评论 -
剑指offer JZ40 数组中只出现一次的两个数字
题目链接:JZ40 数组中只出现一次的两个数字解题基础首先要知道异或运算的几个性质交换律结合律 (ab)c == a(bc)对于任何数x,都有xx=0,x0=x自反性 A XOR B = C 则 C XOR B = A本题思路:如果只有一个数字仅出现一次,其余都出现两次,则所有数字异或的结果就是那个仅出现一次的数字。此题中,有两个数字只出现一次。先对所有数字进行一次异或,得到两个出现一次的数字的异或值。在异或结果中找到任意为 1 的位。根据这一位对所有的数字进行分组。原创 2021-04-29 14:21:15 · 120 阅读 · 0 评论 -
剑指offer JZ39 平衡二叉树
题目链接:JZ39 平衡二叉树本题思路:import java.lang.Math;public class Solution { public boolean IsBalanced_Solution(TreeNode root) { if(root == null) return true; // 判断左右两个子树的高度差 && 左右两个子树都是一棵平衡二叉树 return Math.abs(maxDepth(root.le原创 2021-04-29 14:19:23 · 65 阅读 · 0 评论 -
剑指offer JZ38 二叉树的深度
题目链接:JZ38 二叉树的深度本题思路:/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/import java.lang.Math;public class Solution { public int Tre原创 2021-04-29 14:16:26 · 68 阅读 · 0 评论 -
剑指offer JZ37 数字在升序数组中出现的次数
题目链接:JZ37 数字在升序数组中出现的次数本题思路:public class Solution { public int GetNumberOfK(int [] array , int k) { // 排序数组中的搜索问题 首先想到二分法 // 统计次数 找到左右边界(left k k k right) 次数= right - left - 1 return right(array, k) - left(array, k) - 1;原创 2021-04-29 14:06:05 · 74 阅读 · 0 评论 -
剑指offer JZ36 两个链表的第一个公共结点
题目链接:JZ36 两个链表的第一个公共结点本题思路:/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {原创 2021-04-29 12:44:34 · 79 阅读 · 0 评论 -
剑指offer JZ35 数组中的逆序对
题目链接:JZ35 数组中的逆序对本题思路:数组中的逆序对(归并排序,清晰图解)public class Solution { public int InversePairs(int [] array) { // 分治思想:归并排序 int len = array.length; int[] copy = new int[len]; for(int i = 0; i < len; i++) { co原创 2021-04-29 10:33:19 · 121 阅读 · 0 评论 -
剑指offer JZ34 第一个只出现一次的字符
题目链接:JZ34 第一个只出现一次的字符本题思路:import java.util.*;public class Solution { public int FirstNotRepeatingChar(String str) { Map<Character, Integer> map = new HashMap<>(); for(int i = 0; i < str.length(); i++) { c原创 2021-04-27 09:16:32 · 129 阅读 · 0 评论 -
剑指offer JZ33 丑数
题目链接:JZ33 丑数_牛客题霸_牛客网 (nowcoder.com)本题思路:我们知道,丑数的排列是1,2,3,4,5,6,8,10…其中规律是:任意一个丑数都是由小于它的某一个丑数乘以2、3或者5得到的,相当于三个结果链表,那么所有丑数的排列,必定就是下面ABC3个链表的合并结果然后去重得到的。A:{1*2,2*2,3*2……}B:{1*3,2*3,3*3……}C:{1*5,2*5,3*5……}构建丑数数组:我们每次添加进去一个当前计算出来个三个丑数的最小的一个,并且是谁计算的,谁原创 2021-04-27 09:12:32 · 112 阅读 · 0 评论 -
剑指offer JZ32 把数组排成最小的数
题目链接:JZ32 把数组排成最小的数本题思路:import java.util.ArrayList;public class Solution { public String PrintMinNumber(int [] numbers) { // 若拼接字符串 x + y > y + x 则 x “大于” y // 332 > 323 3 “大于” 32 3排在32后面 ArrayList<String> list原创 2021-04-21 22:29:34 · 102 阅读 · 0 评论 -
剑指offer JZ31 整数中1出现的次数(从1到n整数中1出现的次数)
题目链接:JZ31 整数中1出现的次数(从1到n整数中1出现的次数)本题思路:参考高赞答案:对于整数n,我们将这个整数分为三部分:当前位数字cur,更高位数字high,更低位数字low,如:对于n=21034,当位数是十位时,cur=3,high=210,low=4。我们从个位到最高位 依次计算每个位置出现1的次数:当前位的数字等于0时,例如n=21034,在百位上的数字cur=0,百位上是1的情况有:00100~ 00199,01100~ 01199,……,20100~20199。一共有2原创 2021-04-21 07:49:18 · 72 阅读 · 0 评论 -
剑指offer JZ30 连续子数组的最大和
题目链接:JZ30 连续子数组的最大和本题思路:import java.util.*;public class Solution { public int FindGreatestSumOfSubArray(int[] array) { // 动态规划 int[] dp = new int[array.length]; dp[0] = array[0]; int max = dp[0]; for(int i =原创 2021-04-18 19:41:37 · 115 阅读 · 0 评论 -
剑指offer JZ29 最小的K个数
题目链接:JZ29 最小的K个数给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果k > 数组的长度,那么返回一个空的数组。本题思路:大根堆 实时维护数组的前 k 小值。首先将前 k 个数插入大根堆中,随后从第 k+1个数开始遍历,如果当前遍历到的数比大根堆的堆顶的数要小,就把堆顶的数弹出,再插入当前遍历到的数。最后将大根堆里的数存入链表返回即可。import java.util.*;public cl原创 2021-04-18 19:39:32 · 96 阅读 · 0 评论 -
剑指offer JZ28 数组中出现次数超过一半的数字
题目链接:JZ28 数组中出现次数超过一半的数字本题思路:public class Solution { public int MoreThanHalfNum_Solution(int [] array) { int len = array.length; int res = 0; int count = 0; for(int i = 0; i < len; i++) { int temp = arr原创 2021-04-15 23:06:34 · 70 阅读 · 0 评论 -
剑指offer JZ27 字符串的排列
题目链接:JZ27 字符串的排列本题思路:import java.util.*;public class Solution { // 结果顺序不同也算错 ArrayList<String> res = new ArrayList<>(); public ArrayList<String> Permutation(String str) { char[] c = str.toCharArray();原创 2021-04-15 23:04:31 · 89 阅读 · 0 评论 -
剑指offer JZ26 二叉搜索树与双向链表
题目链接:JZ26 二叉搜索树与双向链表本题思路:public class Solution { TreeNode pre, head; public TreeNode Convert(TreeNode pRootOfTree) { // base case if(pRootOfTree == null) return null; // 中序遍历 构造链表 inOrder(pRootOfTree); ret原创 2021-04-15 23:02:59 · 61 阅读 · 0 评论 -
剑指offer JZ25 复杂链表的复制
题目链接:JZ25 复杂链表的复制本题思路:public class Solution { public RandomListNode Clone(RandomListNode pHead) { // base case if(pHead == null) return pHead; // 链表节点的复制 // cur = cur.next.next跳到原链表下一个节点 for(RandomListNode cur原创 2021-04-15 23:01:11 · 66 阅读 · 0 评论 -
剑指offer JZ24 二叉树中和为某一值的路径
题目链接:JZ24 二叉树中和为某一值的路径本题思路:public class Solution { // 结果列表res中可能有多个列表 // 所以ArrayList<ArrayList<Integer>> ArrayList<ArrayList<Integer>> res = new ArrayList<>(); // 输出结果 ArrayList<Integer> path = new Arr原创 2021-04-15 22:59:24 · 57 阅读 · 0 评论 -
剑指offer JZ23 二叉搜索树的后序遍历序列
题目链接:JZ23 二叉搜索树的后序遍历序列本题思路:public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { // java中数组可以为null 也可以为[] if(sequence == null || sequence.length == 0) return false; return judge(sequence, 0, sequence.le原创 2021-03-06 19:32:19 · 103 阅读 · 1 评论 -
剑指offer JZ22 从上往下打印二叉树
题目链接:JZ22 从上往下打印二叉树本题思路:import java.util.ArrayList;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { public原创 2021-03-06 18:36:38 · 77 阅读 · 0 评论 -
剑指offer JZ21 栈的压入、弹出序列
题目链接:JZ21 栈的压入、弹出序列本题思路:import java.util.ArrayList;import java.util.Stack;public class Solution { public boolean IsPopOrder(int [] pushA,int [] popA) { // 辅助栈 按题目入栈顺序压栈 Stack<Integer> s = new Stack(); // 标识题原创 2021-03-05 16:56:04 · 107 阅读 · 0 评论 -
剑指offer JZ20 包含min函数的栈
题目链接:JZ20 包含min函数的栈本题思路:import java.util.Stack;public class Solution { Stack<Integer> s1 = new Stack(); Stack<Integer> s2 = new Stack(); public void push(int node) { s1.push(node); // 最小元素栈.始终保持peek是最小值原创 2021-03-05 13:17:50 · 91 阅读 · 0 评论 -
剑指offer JZ19 顺时针打印矩阵
题目链接:JZ19 顺时针打印矩阵本题思路:import java.util.ArrayList;public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) { ArrayList<Integer> list = new ArrayList<>(); if(matrix.length == 0) return list;原创 2021-03-04 20:24:12 · 99 阅读 · 2 评论 -
剑指offer JZ18 二叉树的镜像
题目链接:JZ18 二叉树的镜像本题思路:import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } * } */public class Solution { /**原创 2021-03-04 18:34:12 · 131 阅读 · 1 评论 -
剑指offer JZ17 树的子结构
题目链接:JZ17 树的子结构本题思路:/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { public boolean HasSubtree(TreeNode roo原创 2021-03-04 18:19:47 · 58 阅读 · 1 评论