
剑指offer第2版(Java实现)
文章平均质量分 67
带你全面解答剑指offer中的疑难点
努力彪
但行好事,莫问前程
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
斐波那契数列(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例牛客版本leetcode版本题目概述(简单难度)题目链接:点我进入leetcode点我进入牛客思路与代码思路展现这道题目大家第一时间会想到我们的递归,虽然思路是正确的,但是有一个缺点就是当斐波那契的数字过多的时候,例如假设我们规定数字个数在0-49之间,使用递归还是勉强可以通过的,但是一旦像本题目这个n是无穷多的话这个时候时间复杂度就会过高,过高在我们对应的这个平台提交的时候就会超出时间限制,所以这个时候我们就要思考了,需要什么方法来去解决这原创 2022-03-14 17:21:53 · 900 阅读 · 4 评论 -
二叉树中和为某一值的路径(中等难度)
目录题目概述(中等难度)思路与代码思路展现代码示例总结题目概述(中等难度)题目链接:点我进入leetcode思路与代码思路展现代码示例总结原创 2022-03-10 15:13:37 · 211 阅读 · 0 评论 -
和为s的连续正数序列----滑动窗口经典题目(简单难度)
目录题目概述(简单难度)思路与代码思路展现(滑动窗口)代码示例总结题目概述(简单难度)输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]题目链接:点我进入leetcode思路与代码思路展现(滑动窗口)这道原创 2022-03-04 16:13:42 · 121 阅读 · 0 评论 -
旋转数组的最小数字(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例注意事项题目概述(简单难度)题目链接:点我进入leetcode思路与代码思路展现使用经典二分法,题解直接看此链接即可:点我进入链接代码示例注意此处我们将代码进行了改动,并附上改动原因public class Solution { // [3, 4, 5, 1, 2] // [1, 2, 3, 4, 5] // 不能使用左边数与中间数比较,这种做法不能有效地减治 // [1, 2, 3, 4, 5]原创 2022-02-28 15:57:31 · 461 阅读 · 0 评论 -
数组中数字出现的次数(中等难度)
目录题目概述(中等难度)思路与代码思路展现代码示例题目概述(中等难度)题目链接:点我进入leetcode思路与代码思路展现首先这道题目用到了原码,反码,补码的知识,有需要的小伙伴来看下这篇博客温习一下:点我进入博客题解可以看这个:点我进入题解那么先来看代码,然后我再对题解做一下补充代码示例class Solution { public int[] singleNumbers(int[] nums) { int bitmask = 0; //把数组中的所有元素全原创 2022-02-20 18:17:47 · 568 阅读 · 0 评论 -
0~n-1中缺失的数字(简单难度)
目录题目概述(简单难度)思路与代码思路展现方法1 二分法代码示例注意事项方法2 位运算代码示例总结题目概述(简单难度)思路与代码思路展现方法1 二分法排序数组中的搜索问题,首先想到 二分法 解决。这道题目使用二分法我是真没想到,这块我们直接上代码,看来还是本人题做的少了代码示例class Solution { public int missingNumber(int[] nums) { int i =0,j = nums.length - 1; wh原创 2022-02-15 16:42:35 · 667 阅读 · 0 评论 -
不用加减乘除做加法(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例题目概述(简单难度)题目链接:点我进入leetcode思路与代码思路展现这道题目的思路我们依然选择来看题解就好,我精心挑选了如下题解,大家可以直接观看即可:这个题解是我认为讲的最好的题解这个题解也不错下面我们再来科普下二进制的加法点我进入博客注意一个问题就是二进制加法中是满2进1,然后满2的那一位减掉的数字是2,并不是1.关于移位运算符大家可以看我的这篇博客:点我进入博客也可以看这篇题解的介绍:点我进入题解代码示例clas原创 2022-02-15 12:35:37 · 345 阅读 · 0 评论 -
二进制中1的个数(简单难度)
目录题目概述(中等难度)思路与代码思路展现代码示例总结题目概述(中等难度)题目链接:点我进入leetcode思路与代码思路展现代码示例总结原创 2022-02-14 17:23:36 · 162 阅读 · 0 评论 -
树的子结构(中等难度,好题目)
目录题目概述(中等难度)思路与代码思路展现代码示例总结题目概述(中等难度)题目链接:点我进入leetcode思路与代码思路展现这道题目首先跟之前的一道题目非常的类似,但其实有所不同,在此先贴上链接:另一课树的子树先来说一点:树的子结构跟子树是完全两个不同的概念,准确来说树的子结构更像是包含了子树的概念,例如对与[1,2,3,4,5]这棵树而言,[2,4,5]是他的子树,但是2不能作为它的子树,但是可以作为子结构.先来看代码,我们挨个进行解析代码示例class Solution {原创 2022-02-10 13:07:50 · 602 阅读 · 0 评论 -
栈的压入、弹出序列(中等难度)
目录题目概述(中等难度)思路与代码思路展现代码示例注意事项总结题目概述(中等难度)思路与代码思路展现这里的思路就直接给大家贴K神的思路了,K神永远的神,代码可以看我的:戳我戳我代码示例class Solution { public boolean validateStackSequences(int[] pushed, int[] popped) { //定义一个辅助栈 Stack<Integer> stack = new Stack<原创 2022-02-06 17:19:50 · 749 阅读 · 0 评论 -
用两个栈实现队列(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例错误示范题目概述(简单难度)题目链接:点我进入对应题目思路与代码思路展现做这题之前我们首先要明白一点就是,栈是先进后出的,队列是先进先出的。我 们 可以 使用两个栈stackPop和stackPush,往队列中添加元素的时候直接把要添加的值压入 到 stackPush 栈 中 。 往 队 列 中 删 除 元 素 的 时 候 如 果 stackPop 中 有 元 素 我 们 就 直 接 删 除,如果没有元素,我们需要把stackPush中的元素全原创 2022-02-06 11:50:56 · 356 阅读 · 0 评论 -
包含min函数的栈(其实就是实现一个最小栈)(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例题目概述(简单难度)题目链接点我进入链接思路与代码思路展现这道题目与之前实现一个最小栈这道题目实际上是一个题目,所以大家可以直接看这篇博客即可:戳我戳我代码示例class MinStack { //定义两个栈,stack和minStack private Stack<Integer> stack = new Stack<>(); private Stack<Integer>原创 2022-02-05 21:46:59 · 453 阅读 · 0 评论 -
二叉树的镜像(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例题目概述(简单难度)题目链接点我进入题目思路与代码思路展现这块我推荐这个人的题解,写的很详细,非常好.戳我戳我这个题目与之前对称二叉树不同的是,这个题目是需要我们输出镜像二叉树,那个题目只需要判断即可,在此附上我们的博客:对称二叉树代码示例class Solution { public TreeNode mirrorTree(TreeNode root) { helper(root); ret原创 2022-02-05 19:02:57 · 669 阅读 · 0 评论 -
平衡二叉树(简单难度)
目录题目概述(简单难度)思路与代码思路1代码1思路2代码2总结题目概述(简单难度)给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1示例 1:输入:root = [3,9,20,null,null,15,7]输出:true示例 2:输入:root = [1,2,2,3,3,null,null,4,4]输出:false示例3:输入:root = []输出:true题目链接:点我进入原创 2021-10-19 15:00:35 · 240 阅读 · 0 评论 -
二叉搜索树的最近公共祖先(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例题目概述(简单难度)题目链接:点我进入此题目思路与代码思路展现此题目思路与之前一道题目二叉树的最近公共祖先这道题目是一个类型的,所以直接看我这篇博客即可.点我进入链接两道题目解法一摸一样.思路也一样代码示例class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root =原创 2022-02-05 10:32:36 · 424 阅读 · 0 评论 -
从上到下打印二叉树 III(中等难度)
目录题目概述(中等难度)思路与代码思路展现方法1 层序遍历 + 双端队列代码示例方法2 层序遍历 + 倒序代码示例题目概述(中等难度)题目链接:点我进入链接思路与代码思路展现方法1 层序遍历 + 双端队列这块直接看K神题解就好,链接放到这里了:戳我戳我个人认为双端队列是需要掌握的,而且有了前面两道题目的铺垫,建议这道题目直接看代码就能理解K神的意思了.代码示例/** * Definition for a binary tree node. * public class TreeN原创 2022-02-04 21:55:21 · 130 阅读 · 0 评论 -
从上到下打印二叉树 II(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例题目概述(简单难度)题目链接:点我进入链接思路与代码思路展现这个题目其实就是二叉树的层序遍历(使用队列)+List集合来完成遍历的操作同时这道题目还要分层打印出来,这也是这道题目的难点,一开始我也没想出来,后来看到了卡神的操作是真的秀,同学们要是想复习二叉树的层序遍历操作可以来看我的这篇博客:点我进入对应博客要想使我们的最后的结果是分层打印出来,就需要使用循环,但是这个循环非常的巧妙: for(int i = queue.size原创 2022-02-04 16:49:45 · 575 阅读 · 0 评论 -
从上到下打印二叉树(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例题目概述(简单难度)题目链接:点我进入链接思路与代码思路展现这个题目其实就是二叉树的层序遍历(使用队列)+List集合来完成遍历的操作同学们要是想复习二叉树的层序遍历操作可以来看我的这篇博客:点我进入对应博客代码示例class Solution { public int[] levelOrder(TreeNode root) { if(root == null) { return new原创 2022-02-04 17:20:22 · 320 阅读 · 0 评论 -
二叉搜索树的后序遍历序列(中等难度)
目录题目概述(中等难度)思路与代码思路展现代码示例题目概述(中等难度)题目链接:点我进入链接思路与代码思路展现这块的思路就看这个大佬的题解吧:写的很详细点此进入题解代码示例class Solution { public boolean verifyPostorder(int[] postorder) { return helper(postorder, 0, postorder.length - 1);}boolean helper(int[] postor原创 2022-02-04 15:57:30 · 435 阅读 · 0 评论 -
二叉搜索树的第k大节点(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例题目概述(简单难度)题目链接:思路与代码思路展现思路建议大家还是看K神的解答即可:点我进入解答代码示例class Solution { int res,k; //注意kthLargest方法要放在dfs方法前,因为涉及到k的赋值 public int kthLargest(TreeNode root, int k) { this.k = k; dfs(root); re原创 2022-02-04 10:47:02 · 508 阅读 · 0 评论 -
从尾到头打印链表(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例题目概述(简单难度)题目链接:从尾到头打印链表思路与代码思路展现栈的特点是后进先出,即最后压入栈的元素最先弹出。考虑到栈的这一特点,使用栈将链表元素顺序倒置。从链表的头节点开始,依次将每个节点压入栈内,然后依次弹出栈内的元素并存储到数组中代码示例class Solution { public int[] reversePrint(ListNode head) { Stack<ListNode> stac原创 2022-02-03 20:17:34 · 536 阅读 · 0 评论 -
二维数组中的查找(中等难度)
目录题目概述(简单难度)思路与代码思路展现方法1 暴力法代码示例方法2 标志数代码示例题目概述(简单难度)题目链接:二维数组中的查找思路与代码思路展现方法1 暴力法如果不考虑二维数组排好序的特点,则直接遍历整个二维数组的每一个元素,判断目标值是否在二维数组中存在。依次遍历二维数组的每一行和每一列。如果找到一个元素等于目标值,则返回 true。如果遍历完毕仍未找到等于目标值的元素,则返回 false。代码示例class Solution { public boolean find原创 2022-02-03 20:06:41 · 404 阅读 · 0 评论 -
第一个只出现一次的字符(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例总结题目概述(简单难度)题目链接:第一个只出现一次的字符思路与代码思路展现这道题目的思路也非常的经典,就是使用我们的map集合,然后map集合value值存储的是我们的boolean值,因为假设字符串s中的字符出现了两次以及超过两次,那么这个字符最终的boolean值就一定是false,不是true,而只有出现一次的字符的boolean值始终为true.代码示例class Solution { public char firstUn原创 2022-01-02 23:15:29 · 157 阅读 · 0 评论 -
求1+2+…+n(简单难度)
目录题目概述(简单难度)思路与代码思路展现(滑动窗口)代码示例总结题目概述(简单难度)题目链接:求1+2+…+n思路与代码思路展现(滑动窗口)这道题目使用递归即可.代码示例class Solution { public int sumNums(int n) { if(n>=1) { return n+sumNums(n-1); } return 0; }}总结这个递归属于单路递归时间复杂度原创 2022-01-02 21:40:50 · 119 阅读 · 0 评论 -
二叉搜索树与双向链表(中等难度)(好题目)
目录题目概述(中等难度)思路与代码思路展现代码示例总结题目概述(中等难度)描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示数据范围:输入二叉树的节点数0≤n≤1000,二叉树中每个节点的值 10000≤val≤1000要求:空间复杂度O(1)(即在原树上操作),时间复杂度 O(n)注意:1.要求不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继2.返回链表中的第一个节点的指针3.函数返回原创 2021-10-23 19:06:59 · 335 阅读 · 4 评论 -
二叉树的最大深度(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例总结题目概述(简单难度)给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回它的最大深度 3题目链接:点我进入leetcode思路与代码思路展现使用子问题来进行解答首先明确什么是深度?深度就是从该节点到根节点所经历原创 2021-10-15 16:53:27 · 186 阅读 · 1 评论 -
对称二叉树(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例总结题目概述(简单难度)给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3题目链接:点我进入leetcode思路与代码思路展现这道题目的思路也是非常简单的:原创 2021-10-18 14:32:31 · 289 阅读 · 0 评论 -
数组中数字出现的次数 II(简单难度)
目录题目概述(简单难度)思路与代码思路1(遍历数组法)代码示例思想2(哈希)总结题目概述(简单难度)在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。示例 1:输入:nums = [3,4,3,3]输出:4示例 2:输入:nums = [9,1,7,9,7,9,7]输出:1题目链接:点我进入leetcode思路与代码思路1(遍历数组法)我的思路是先对数组进行排序后在遍历,使用一个计数器来寻找我们只出现过一次的数字.代码示例c原创 2021-10-09 10:48:52 · 317 阅读 · 22 评论 -
左旋转字符串(简单难度)
目录题目概述(简单难度)思路与代码思路1(字符串切片)代码示例1思路2(列表遍历拼接)代码示例2总结题目概述(简单难度)字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = "abcdefg", k = 2 输出: "cdefgab"示例 2:输入: s = "lrloseumgh", k = 6输出: "umghl原创 2021-10-02 17:44:12 · 103 阅读 · 0 评论 -
翻转单词顺序(简单难度)
目录题目概述(简单难度)思路与代码思路1(面试时最好不要用这个方法)代码示例1思路2(双指针法)代码示例2总结题目概述(简单难度)输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。示例 1:输入: “the sky is blue”输出: “blue is sky the”示例 2:输入: " hello world! "输出: “wo原创 2021-10-01 20:31:04 · 343 阅读 · 0 评论 -
替换空格(简单难度)
目录题目概述(简单难度)思路与代码思路展现思路1(replace方法)代码示例思路2(toCharArray+append方法)代码示例总结题目概述(简单难度)请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy."输出:"We%20are%20happy."附上leetcode链接:点击此处进入leetcode思路与代码思路展现思路1(replace方法)直接使用reaplace方法将所有空格转换成%20.代码示例cla原创 2021-09-02 14:40:36 · 218 阅读 · 0 评论 -
旋转数组的最小数字(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例总结题目概述(简单难度)把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0附上leetcode链接:点击此处进入leetcode思路与代码思路展现代码示例总结1:原创 2021-08-22 00:34:42 · 120 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例总结题目概述(简单难度)输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。附上leetcode链接:点我进入leetcode思路与代码思路展现此题目我们是将数组中的奇数放在前,偶数放在后,对此我们可以使用首尾双指针法首尾指针法的思路如下:1:定义一个le原创 2021-08-21 11:46:13 · 189 阅读 · 0 评论 -
数组中重复的数字(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例总结题目概述(简单难度)找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入: [2, 3, 1, 0, 2, 5, 3]输出:2 或 3附上leetcode链接:点击此处进入leetcode思路与代码思路展现代码示例总结1:此算法时间复杂度O(N)空间复杂原创 2021-08-20 16:41:01 · 181 阅读 · 0 评论 -
数组中出现次数超过一半的数字(简单难度)
目录题目概述(简单难度)思路与代码思路展现思路1(排序法)代码示例思路2(摩尔投票法,最优解)代码示例总结题目概述(简单难度)数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2附上leetcode链接:点击此处进入链接思路与代码思路展现思路1(排序法)排序法的思想其实非常简单,一个数组中出现次数最多的数字经过排序后,这个数组最中间的原创 2021-08-16 17:57:41 · 192 阅读 · 0 评论 -
和为s的两个数字(简单难度)
目录包继承多态包包 (package) 是组织类的一种方式. 使用包的主要目的是保证类的唯一性.例如, 你在代码中写了一个 Test 类. 然后你的同事也可能写一个 Test 类. 如果在一个包下出现两个同名的类, 就会冲突, 导致代码不能编译通过.如下图所示:可以看到图中的两个类的名称虽然相同,但是并没有报错,原因是第一个TestDemo类的路径为com.baidu.www.TestDemo,第二个TestDemo类的路径为src.TestDemo,路径不相同,所以重名也不会报错.如下图原创 2021-08-16 16:12:24 · 285 阅读 · 0 评论 -
删除链表的节点(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例总结题目概述(简单难度)给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例 1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]示例 2:输入:head = [], val = 1输出:[]示例 3:输入:head = [7,7,7,7], val = 7输出:[]思路与代码思路原创 2021-08-09 19:44:23 · 265 阅读 · 0 评论 -
两个链表的第一个公共节点(简单难度)
目录题目概述思路与代码思路展现代码示例总结题目概述附上leetcode链接:点击此处进入leetcode链接思路与代码思路展现代码示例总结原创 2021-08-09 13:38:03 · 700 阅读 · 0 评论 -
删除链表中重复的结点(手把手带你理解思路,从错误代码带你逐步完善代码,非常实用!)
目录题目概述(简单难度)思路与代码思路展现代码示例代码解析正常情况特殊情况1(完善第一步)特殊情况2(完善第二步)特殊情况3(完善最终曲)总结题目概述(简单难度)在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5示例1输入:{1,2,3,3,4,4,5}返回值:{1,2,5}附上牛客网链接:点击此处进入牛客网思路与代码原创 2021-08-04 17:41:04 · 193 阅读 · 0 评论 -
反转链表(面试常考,非常重要)
目录题目概述思路与代码思路展现代码示例总结题目概述给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]示例 2:输入:head = [1,2]输出:[2,1]示例 3:输入:head = []输出:[]附上leetcode链接:点击此处进入leetcode思路与代码思路展现反转链表这个题目的思路非常的巧妙,在此我们先讲迭代法:迭代法的思路是这样的:1:首先定义一个原创 2021-08-03 19:30:15 · 390 阅读 · 0 评论