
剑指Offer
qq_34623223
这个作者很懒,什么都没留下…
展开
-
LeetCode刷题笔记 138 / 剑指Offer 35
题目:复制带随机指针的链表给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的 深拷贝。我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:val:一个表示 Node.val 的整数。random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果...原创 2020-02-19 19:03:57 · 158 阅读 · 0 评论 -
LeetCode刷题笔记 226 / 剑指Offer 27
题目:翻转二叉树翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1答案将二叉树所有的节点的左右孩子交换。相当于不管用什么方式,只要遍历所有节点,并把节点的左右孩子交换即可。1.递归class Solu...原创 2020-02-27 15:20:44 · 155 阅读 · 0 评论 -
LeetCode刷题笔记 101 / 剑指Offer 28
题目:对称二叉树给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [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答案:参考链接:https://lee...原创 2020-02-15 12:56:03 · 206 阅读 · 0 评论 -
LeetCode刷题笔记 21 / 剑指Offer刷题笔记 25(涉及到链表)
题目:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。输入:1->2->4, 1->3->4输出:1->1->2->3->4->4/** 1. Definition for singly-l原创 2018-12-05 17:09:26 · 131 阅读 · 0 评论 -
LeetCode刷题笔记 10 / 剑指Offer刷题笔记 19(涉及到递归)
题目:给定一个字符串 (s) 和一个字符模式 ( p )。实现支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符。‘ * ’匹配零个或多个前面的元素。匹配应该覆盖整个字符串 (s) ,而不是部分字符串。(s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。)我的答案:利用java现有正则方法可直接求出imp...原创 2018-11-27 20:44:34 · 160 阅读 · 0 评论 -
剑指Offer刷题笔记 17
题目:打印从1到最大的n位数输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]答案:陷阱:n过大时是大数问题,不能简单用int或者long数据输出。解决方法:通过字符数组char[]来进行输出数字。方法一:在字符串表达的数字上模拟加...原创 2020-04-06 12:57:53 · 132 阅读 · 0 评论 -
LeetCode刷题笔记 79 / 剑指Offer刷题笔记 12(涉及到回溯)
题目:单词搜索给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 word = “ABCCED”,...原创 2020-02-12 13:50:58 · 241 阅读 · 0 评论 -
LeetCode刷题笔记 236 / 剑指Offer 68
题目:二叉树的最近公共祖先答案:参考链接:JAVA DFS+剪枝递归我们使用DFS搜索每一个节点的左右子树:1、若子树上存在p和q的公共节点,返回此公共节点2、若不存在公共节点,但是存在p或q任意一个节点,返回此节点3、若不存在公共、p、q节点,则返回null。那么,有以下几个结论:1、若当前节点为null、p、q之一,直接返回当前节点2、若左子树上存在公共节点(返回值非p、...原创 2020-02-29 13:30:57 · 186 阅读 · 0 评论 -
LeetCode刷题笔记 238 / 剑指Offer 66
题目:除自身以外数组的乘积给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。进阶:你可以在常数空间复杂度内完成这个题目吗?( 出于对空...原创 2020-02-29 19:51:39 · 442 阅读 · 0 评论 -
LeetCode刷题笔记 239 / 剑指Offer 59(涉及到双端队列)
题目:滑动窗口最大值答案:参考链接:详细通俗的思路分析,多解法1.优先队列建立大顶堆,保证堆顶是最大值。每次移除元素时间复杂度O(k)class Solution { public int[] maxSlidingWindow(int[] nums, int k) { int n = nums.length; if (nums == null |...原创 2020-03-01 13:04:24 · 170 阅读 · 0 评论 -
剑指Offer刷题笔记 58
题目:反转单词顺序 I答案将字符串用trim函数去掉头尾空格后,用split函数以空格进行拆分。“ aaa bbb ccc”拆分结果为:[“aaa”,"","","","",“bbb”,"","",“ccc”].从后向前遍历数组,将“”忽略,将每个单词后面加一个“ ”,最后一个单词不加。class Solution { public String reverse...原创 2020-03-16 12:07:37 · 120 阅读 · 0 评论 -
剑指Offer刷题笔记 56(涉及到位运算)
题目:数组中数字出现的次数一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例 1:输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]示例 2:输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2]答案:首先考虑只有一个数字...原创 2020-03-15 12:22:06 · 141 阅读 · 0 评论 -
LeetCode刷题笔记 104 / 剑指Offer 55 - I(涉及到递归、层次遍历)
题目:二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。答案:1.递归思路:树的深度等于1+最大的子树的深度clas...原创 2020-02-16 12:22:31 · 109 阅读 · 0 评论 -
LeetCode刷题笔记 34 / 剑指Offer 53 - I(涉及二分法)
class Solution { public int[] searchRange(int[] nums, int target) { int[] a = new int[nums.length]; int low=0,high=nums.length-1,flag=0; while(low<=high){ in...原创 2018-12-16 15:58:47 · 183 阅读 · 0 评论 -
LeetCode刷题笔记 169 / 剑指Offer 39(涉及到投票算法)
题目:求众数给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2答案:1.哈希表用哈希表来快速统计每个元素出现的次数。然后遍历哈希表,返回value大于n/2的key值...原创 2020-02-23 12:53:58 · 178 阅读 · 0 评论 -
LeetCode刷题笔记 295 / 剑指Offer 41(涉及到大小顶堆)
题目:数据流的中位数答案:参考链接:暴力法+二分查找+手动实现大小堆1.排序每次新进来一个数,都把它与已存的数进行排序。可以选择插入排序,将数字插入到已排好序的序列中,并保持整个序列的排序状态。可以通过二分搜索,查找到正确位置,然后将元素插入到正确位置。2.大顶堆+小顶堆维护两个堆:用于存储输入数字中较小一半的大顶堆 lo用于存储输入数字的较大一半的小顶堆 hi需要保证这 2...原创 2020-03-03 15:34:39 · 209 阅读 · 0 评论 -
LeetCode刷题笔记 53 / 剑指Offer 42
题目:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。我的答案:1)暴力法(太慢了,不推荐)class Solution { public int maxSubArray(int[] nums) {...原创 2019-03-22 10:56:34 · 156 阅读 · 0 评论 -
LeetCode刷题笔记 3 / 剑指Offer 48(涉及到哈希表)
题目:给定一个字符串,找出最长的没有重复字符的子字符串的长度。我的答案:(Java)整体思路:建立哈希表,依次遍历字符串中的字符,哈希表中有则去掉对应位及之前的键值,没有则按续加入哈希表。第一次提交import java.util.*;class Solution { public int lengthOfLongestSubstring(String s) { ...原创 2018-11-23 15:59:53 · 167 阅读 · 0 评论 -
LeetCode刷题笔记 160 / 剑指Offer 52
题目:相交链表编写一个程序,找到两个单链表相交的起始节点。答案:参考链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/solution/xiang-jiao-lian-biao-by-leetcode/1.暴力法对链表A中的每一个结点 ai ,遍历整个链表 B 并检查链表 B 中是否存在结点和 a...原创 2020-02-23 12:26:40 · 188 阅读 · 0 评论 -
剑指Offer刷题笔记 46(涉及到递归、动态规划)
题目:把数字翻译成字符串给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例 1:输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mc...原创 2020-03-12 13:02:13 · 141 阅读 · 0 评论 -
剑指Offer刷题笔记 43
题目:1~n整数中1出现的次数输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。示例 1:输入:n = 12输出:5示例 2:输入:n = 13输出:6限制:1 <= n < 2^31答案:参考链接:Java100%附思路说明以n = 54321为例:求...原创 2020-03-08 14:25:13 · 135 阅读 · 0 评论 -
剑指Offer刷题笔记 14(涉及到动态规划、贪心算法)
题目:剪绳子答案:1.动态规划f(n) = max(f(i),f(n-i))class Solution { public int cuttingRope(int n) { if(n < 2) return 0; if(n == 2) return 1; if(n == 3) return 2; int[] ...原创 2020-03-06 14:27:55 · 169 阅读 · 0 评论 -
剑指Offer刷题笔记 13(涉及到BFS、DFS)
题目:机器人的运动范围答案:参考链接:BFS+DFS矩阵路径的求解方法可以归结为图或树的遍历/搜索方法,而图的通用搜索算法就是BFS(广度优先搜索)和DFS(优先搜索)。1.深度优先算法DFS遍历节点时,满足本题条件则计数符加1,并设置该节点标志为true,同时判断该节点的子节点是否也满足本题条件,进行递归操作。class Solution { public int movi...原创 2020-03-06 12:46:07 · 281 阅读 · 0 评论 -
剑指Offer刷题笔记 38 Java实现
题目:字符串的排列输入一个字符串(可能有字符重复),按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。答案:第一步求所有可能出现在第一个位置的字符,即把第一个字符和后面所有的字符交换。第二步固定第一个字符,求后面所有字符的排列。仍把后面的字符分为两部分:后面字符的第一个字符(与它后面...原创 2020-02-23 21:28:55 · 231 阅读 · 0 评论 -
剑指Offer刷题笔记 37 / LeetCode刷题笔记 297 java实现
题目:序列化二叉树请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过某种符号表示空节点(#),结点的数值之间用一个特殊字符(如’,’)隔开。二叉树的反序列化是指:根据某种遍历...原创 2020-02-23 19:54:29 · 170 阅读 · 0 评论 -
剑指Offer刷题笔记 36 java实现
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。答案:按照右->中->左的顺序进行遍历。在遍历的过程中将根节点与排序好的链表连起来,更新头结点。eg:按照右->中->左的顺序,首先遍历16,头结点指向16;然后遍历到14,令14的right指向16,16的left指向14,头结点指向14;然后遍...原创 2020-02-22 23:48:14 · 181 阅读 · 0 评论