![](https://img-blog.csdnimg.cn/20200323212938351.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
剑指Offer
文章平均质量分 60
剑指Offer刷题笔记
dev_zyx
talk is cheap, show me code!
展开
-
剑指 Offer 67. 把字符串转换成整数
参考:8. 字符串转换整数 (atoi)原创 2020-09-24 01:12:38 · 152 阅读 · 0 评论 -
剑指 Offer 63. 股票的最大利润
参考:121. 买卖股票的最佳时机原创 2020-09-24 01:09:50 · 162 阅读 · 0 评论 -
剑指 Offer 56 - II. 数组中数字出现的次数 II
参考:137. 只出现一次的数字 II原创 2020-09-24 01:03:53 · 109 阅读 · 0 评论 -
剑指 Offer 55 - II. 平衡二叉树
参考:110. 平衡二叉树原创 2020-09-24 00:56:59 · 148 阅读 · 0 评论 -
剑指 Offer 55 - I. 二叉树的深度
参考:104. 二叉树的最大深度原创 2020-09-24 00:55:06 · 154 阅读 · 0 评论 -
剑指 Offer 48. 最长不含重复字符的子字符串
参考:3. 无重复字符的最长子串原创 2020-09-24 00:46:52 · 98 阅读 · 0 评论 -
剑指 Offer 42. 连续子数组的最大和
参考:53. 最大子序和原创 2020-09-23 21:55:22 · 105 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字
参考:169. 多数元素原创 2020-09-23 21:51:47 · 94 阅读 · 0 评论 -
剑指 Offer 34. 二叉树中和为某一值的路径
参考:113. 路径总和 II原创 2020-09-23 21:46:54 · 138 阅读 · 0 评论 -
剑指 Offer 32 - III. 从上到下打印二叉树 III
参考:103. 二叉树的锯齿形层次遍历原创 2020-09-23 21:43:50 · 120 阅读 · 0 评论 -
剑指 Offer 32 - II. 从上到下打印二叉树 II
参考:102. 二叉树的层次遍历原创 2020-09-23 21:41:05 · 100 阅读 · 0 评论 -
剑指 Offer 29. 顺时针打印矩阵
参考:54. 螺旋矩阵原创 2020-09-23 21:36:14 · 119 阅读 · 0 评论 -
剑指 Offer 28. 对称的二叉树
参考:101. 对称二叉树原创 2020-09-23 21:33:26 · 162 阅读 · 0 评论 -
剑指 Offer 25. 合并两个排序的链表
参考:21. 合并两个有序链表原创 2020-09-23 21:28:13 · 107 阅读 · 0 评论 -
剑指 Offer 24. 反转链表
参考:206. 反转链表原创 2020-09-23 21:24:27 · 1211 阅读 · 0 评论 -
剑指 Offer 16. 数值的整数次方
参考:50. Pow(x, n)原创 2020-09-23 20:40:06 · 102 阅读 · 0 评论 -
剑指 Offer 20. 表示数值的字符串
题目:剑指 Offer 20. 表示数值的字符串题解:// '.' 出现正确情况:只出现一次,且必须出现在 e / E 的前面//// 'e / E' 出现正确情况:只出现一次,且 e / E 出现前,前面必须有数字//// '+ / -' 出现正确情况:只能出现在开头(0位置)或者e / E的后面第一个位置(紧接 e / E 的后面)代码:import java.util.*;// '.' 出现正确情况:只出现一次,且必须出现在 e / E 的前面//原创 2020-08-31 22:47:21 · 252 阅读 · 0 评论 -
剑指 Offer 68 - II. 二叉树的最近公共祖先
题目:剑指 Offer 68 - II. 二叉树的最近公共祖先题解:代码:该题代码无法进行测试。(LeetCode后台对 “结点相等” 已进行处理)1. 疑难点一:2. 疑难点二:public class 面试题68_2 { public static TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root == null) // 当越过叶节点,则直原创 2020-06-24 14:51:34 · 444 阅读 · 0 评论 -
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
题目:剑指 Offer 68 - I. 二叉搜索树的最近公共祖先题解:1. 题解一:迭代2. 题解二:递归代码:1. 代码一:迭代public class 面试题68_1 { // 方法1:迭代 public static TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { while(root != null) // 当节点 root 为空时跳出原创 2020-06-24 11:38:50 · 347 阅读 · 0 评论 -
剑指 Offer 66. 构建乘积数组
题目:剑指 Offer 66. 构建乘积数组题解:1. 题解一:左右数组解释一:解释二:2. 题解二:左(或右)数组解释一:解释二:代码:1. 代码一:左右数组public class 面试题66 { // 方法1:左右数组 public static int[] constructArr(int[] a) { if(a == null || a.length == 0) { return原创 2020-06-23 14:01:50 · 268 阅读 · 0 评论 -
剑指 Offer 65. 不用加减乘除做加法
题目:剑指 Offer 65. 不用加减乘除做加法题解:代码:1. 代码一:迭代public class 面试题65 { // 方法1:迭代 public static int add(int a, int b) { int sum; // 无进位和 int carry; // 进位值 while(b != 0) // 当进位为 0 时跳出 { sum = a ^ b; // 异或原创 2020-06-23 11:33:52 · 307 阅读 · 0 评论 -
剑指 Offer 64. 求1+2+…+n
题目:剑指 Offer 64. 求1+2+…+n题解:解释一:解释二:代码:public class 面试题64 { public int res = 0; public int sumNums(int n) { boolean x = n > 1 && sumNums(n - 1) > 0; res += n; return res; } public原创 2020-06-23 09:42:44 · 266 阅读 · 0 评论 -
剑指 Offer 62. 圆圈中最后剩下的数字(约瑟夫环问题)
题目:剑指 Offer 62. 圆圈中最后剩下的数字题解:约瑟夫环问题1. 题解一:模拟链表,O(n²)2. 题解二:数学解法,O(n)代码:1. 代码一:import java.util.*;public class 面试题62 { // 方法1:模拟链表 public static int lastRemaining(int n, int m) { ArrayList<Integer> list = new Array原创 2020-06-21 13:04:45 · 439 阅读 · 0 评论 -
剑指 Offer 61. 扑克牌中的顺子
题目:剑指 Offer 61. 扑克牌中的顺子题解:注意:大小王属于癞子牌1. 题解一:不排序方式2. 题解二:排序方式代码:1. 代码一:不排序方式import java.util.*;public class 面试题61 { // 方法1:不排序方式 public static boolean isStraight(int[] nums) { Set<Integer> set = new HashSet<>原创 2020-06-20 18:12:10 · 283 阅读 · 0 评论 -
剑指 Offer 60. n个骰子的点数
题目:剑指 Offer 60. n个骰子的点数题解:疑难点:代码:public class 面试题60 { public static double[] twoSum(int n) { // 状态定义,dp[i][j]表示骰子个数为i时点数j可能出现的次数,dp[i][s]表示i个骰子掷出s点的次数 int dp[][] = new int[n + 1][6 * n + 1]; // 初始状态 for(int原创 2020-06-20 13:33:58 · 281 阅读 · 0 评论 -
剑指 Offer 59 - I. 滑动窗口的最大值
题目:剑指 Offer 59 - I. 滑动窗口的最大值题解:代码:import java.util.*;public class 面试题59_1 { public static int[] maxSlidingWindow(int[] nums, int k) { if(nums == null || k < 1 || nums.length < k) { int temp[] = new int[0];原创 2020-06-19 17:29:58 · 450 阅读 · 0 评论 -
面试题58 - II. 左旋转字符串
题目:面试题58 - II. 左旋转字符串题解:1. 题解一:字符串切片2. 题解二:列表遍历拼接3. 题解三:字符串遍历拼接4. 题解四:三步翻转法(优先)算法思想:1. 第一步:先对前 n 个字符进行翻转;2. 第二步:然后对后面的部分进行翻转;3. 第三步:最后对整体进行翻转。代码:1. 代码一:字符串切片// 方法1:字符串切片public static String reverseLeftWords(String s, int n) { re原创 2020-06-19 11:09:33 · 212 阅读 · 0 评论 -
面试题58 - I. 翻转单词顺序
题目:面试题58 - I. 翻转单词顺序题解:1. 题解一:双指针代码:1. 代码一:双指针public class 面试题58_1 { // 方法1:双指针 public static String reverseWords(String s) { s = s.trim(); // 删除首尾空格 int j = s.length() - 1; int i = j; StringBuilder res = n原创 2020-06-18 18:41:25 · 362 阅读 · 0 评论 -
面试题57. 和为s的两个数字
题目:面试题57. 和为s的两个数字题解:代码:/** * 面试题57 */public class 面试题57 { public static int[] twoSum(int[] nums, int target) { int i = 0; int j = nums.length - 1; while(i < j) { int sum = nums[i] + nums[j]原创 2020-06-18 12:49:59 · 218 阅读 · 0 评论 -
面试题54. 二叉搜索树的第k大节点
题目:面试题54. 二叉搜索树的第k大节点题解:代码:/** * 面试题54 */public class 面试题54 { public int ans = 0; public int count = 0; public int kthLargest(TreeNode root, int k) { dfs(root, k); return ans; } public void dfs(TreeN原创 2020-06-17 21:40:15 · 172 阅读 · 0 评论 -
面试题53 - I. 在排序数组中查找数字 I
题目:面试题53 - I. 在排序数组中查找数字 I34. 在排序数组中查找元素的第一个和最后一个位置题解:34. 在排序数组中查找元素的第一个和最后一个位置1. 题解一:二分法2. 题解二:遍历法代码:1. 代码一:二分法public class 面试题53_1 { public static int search(int[] nums, int target) { int left = left_bound(nums, target); i原创 2020-06-16 21:01:20 · 191 阅读 · 0 评论 -
面试题52. 两个链表的第一个公共节点
题目:面试题52. 两个链表的第一个公共节点160. 相交链表题解:1. 解释一:2. 解释二:3. 解释三:代码:public class 面试题52 { public static ListNode getIntersectionNode(ListNode headA, ListNode headB) { if(headA == null || headB == null) { return null原创 2020-06-16 18:09:15 · 215 阅读 · 0 评论 -
面试题50. 第一个只出现一次的字符
题目:面试题50. 第一个只出现一次的字符题解:1. 题解一:哈希表代码:1. 代码一:哈希表import java.util.*;public class 面试题50 { // 方法1:哈希表 public static char firstUniqChar(String s) { HashMap<Character, Boolean> map = new HashMap<>(); char c[] =原创 2020-06-15 21:56:46 · 222 阅读 · 0 评论 -
面试题49. 丑数
题目:面试题49. 丑数题解:动态规划(三指针)1. 解释一:2. 解释二:3. 解释三:4. 解释四:代码:public class 面试题49 { public static int nthUglyNumber(int n) { int a = 0; int b = 0; int c = 0; int dp[] = new int[n]; // dp[i] 代表第 i + 1 个丑数原创 2020-06-15 17:22:30 · 261 阅读 · 0 评论 -
面试题47. 礼物的最大价值
题目:面试题47. 礼物的最大价值题解:代码:/** * 面试题47 */public class 面试题47 { public static int maxValue(int[][] grid) { int m = grid.length; // m行 int n = grid[0].length; // n列 int dp[][] = new int[m][n]; dp[0][0] = grid[0][0原创 2020-06-14 23:30:14 · 233 阅读 · 0 评论 -
面试题44. 数字序列中某一位的数字
题目:面试题44. 数字序列中某一位的数字400. 第N个数字题解:1. 解释一:2. 解释二:代码:public class 面试题44 { public static int findNthDigit(int n) { int digit = 1; long start = 1; long count = 9; while(n > count) // 1.原创 2020-06-14 18:22:33 · 396 阅读 · 0 评论 -
面试题46. 把数字翻译成字符串
题目:面试题46. 把数字翻译成字符串题解:注意:此题类似于“青蛙跳台阶”一题。代码:public class 面试题46 { public static int translateNum(int num) { String s = String.valueOf(num); int dp[] = new int[s.length() + 1]; dp[0] = 1; dp[1] = 1; for原创 2020-06-09 22:05:27 · 245 阅读 · 0 评论 -
面试题43. 1~n整数中1出现的次数
题目:面试题43. 1~n整数中1出现的次数233. 数字 1 的个数题解:代码:public class 面试题43 { public static int countDigitOne(int n) { int digit = 1; // 位因子(初始化为:个位) int high = n / 10; // 高位 int cur = n % 10; // 当前位 int low = 0; // 低位原创 2020-06-09 12:31:36 · 281 阅读 · 0 评论 -
面试题36. 二叉搜索树与双向链表
题目:面试题36. 二叉搜索树与双向链表426. 将二叉搜索树转化为排序的双向链表题解:代码:Node.java// Definition for a Node.class Node { public int val; public Node left; public Node right; public Node() { } public Node(int _val) { val = _val; }原创 2020-06-07 13:16:37 · 191 阅读 · 0 评论 -
面试题53 - II. 0~n-1中缺失的数字
1. 数组有序:题目:面试题53 - II. 0~n-1中缺失的数字题解:1. 题解一:二分法2. 题解二:顺序扫描一趟扫描,若nums[i] != i,表示该元素值缺失,返回其下边即可;若一直到数组的最后一个元素都是nums[i] == i,表示缺失的元素正好就是nums[nums.length],因此,返回其对应的下标即可。代码:1. 代码一:二分法public class 面试题53_2 { // 方法1: public static int missin原创 2020-06-06 13:07:13 · 818 阅读 · 0 评论