![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 76
日就月将
这个作者很懒,什么都没留下…
展开
-
剑指 Offer II 064. 神奇的字典(前缀树+dfs)
设计一个使用单词列表进行初始化的数据结构,单词列表中的单词 互不相同 。 如果给出一个单词,请判定能否只将这个单词中一个字母换成另一个字母,使得所形成的新单词存在于已构建的神奇字典中。实现 MagicDictionary 类:MagicDictionary() 初始化对象void buildDict(String[]dictionary) 使用字符串数组dictionary 设定该数据结构,dictionary 中的字符串互不相同bool search(String searchWord)原创 2022-04-28 20:53:24 · 550 阅读 · 0 评论 -
剑指 Offer II 058. 日程表(平衡二叉树,自定义bst二分搜索)
请实现一个 MyCalendar 类来存放你的日程安排。如果要添加的时间内没有其他安排,则可以存储这个新的日程安排。MyCalendar 有一个 book(int start, int end)方法。它意味着在 start 到 end 时间内增加一个日程安排,注意,这里的时间是半开区间,即 [start, end), 实数x 的范围为, start <= x < end。当两个日程安排有一些时间上的交叉时(例如两个日程安排都在同一时间内),就会产生重复预订。每次调用 MyCalendar.b原创 2022-04-27 17:59:08 · 247 阅读 · 0 评论 -
剑指 Offer II 057. 值和下标之差都在给定的范围内(桶排序)
给你一个整数数组 nums 和两个整数k 和 t 。请你判断是否存在 两个不同下标 i 和 j,使得abs(nums[i] - nums[j]) <= t ,同时又满足 abs(i - j) <= k 。如果存在则返回 true,不存在返回 false。示例1:输入:nums = [1,2,3,1], k = 3, t = 0输出:true示例 2:输入:nums = [1,0,1,1], k = 1, t = 2输出:true示例 3:输入:nums = [1,5,原创 2022-04-27 17:23:42 · 146 阅读 · 0 评论 -
剑指 Offer II 043. 往完全二叉树添加节点(队列+层序遍历)
完全二叉树是每一层(除最后一层外)都是完全填充(即,节点数达到最大,第 n 层有 2n-1个节点)的,并且所有的节点都尽可能地集中在左侧。设计一个用完全二叉树初始化的数据结构CBTInserter,它支持以下几种操作:CBTInserter(TreeNode root)使用根节点为root的给定树初始化该数据结构;CBTInserter.insert(int v) 向树中插入一个新节点,节点类型为 TreeNode,值为 v 。使树保持完全二叉树的状态,并返回插入的新节点的父节点的值;原创 2022-04-21 14:22:20 · 99 阅读 · 0 评论 -
剑指 Offer II 040. 矩阵中最大的矩形(单调栈)
给定一个由0 和 1组成的矩阵 matrix,找出只包含 1 的最大矩形,并返回其面积。注意:此题 matrix输入格式为一维 01 字符串数组。示例 1:输入:matrix = ["10100","10111","11111","10010"]输出:6解释:最大矩形如上图所示。示例 2:输入:matrix = []输出:0示例 3:输入:matrix = ["0"]输出:0示例 4:输入:matrix = ["1"]输出:1示例 5:输入:matrix =原创 2022-04-21 14:13:31 · 368 阅读 · 0 评论 -
剑指 Offer II 039. 直方图最大矩形面积(单调栈)<必看>
给定非负整数数组 heights,数组中的数字用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。示例 1:输入:heights = [2,1,5,6,2,3]输出:10解释:最大的矩形为图中红色区域,面积为 10示例2:输入: heights = [2,4]输出: 4提示:1 <= heights.length <=1050 <= heights[i] <= 104来源:力扣(LeetCode)原创 2022-04-20 21:38:15 · 552 阅读 · 0 评论 -
剑指 Offer II 037. 小行星碰撞(栈)
剑指 Offer II 037. 小行星碰撞(栈)给定一个整数数组 asteroids,表示在同一行的小行星。对于数组中的每一个元素,其绝对值表示小行星的大小,正负表示小行星的移动方向(正表示向右移动,负表示向左移动)。每一颗小行星以相同的速度移动。找出碰撞后剩下的所有小行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。示例 1:输入:asteroids = [5,10,-5]输出:[5,10]原创 2022-04-19 19:19:42 · 159 阅读 · 0 评论 -
剑指 Offer II 038. 每日温度(单调栈)
剑指 Offer II 038. 每日温度(单调栈)请根据每日 气温 列表 temperatures,重新生成一个列表,要求其对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用0 来代替。示例 1:输入: temperatures = [73,74,75,71,69,72,76,73]输出:[1,1,4,2,1,1,0,0]示例 2:输入: temperatures = [30,40,50,60]输出:[1,1,1,0]示原创 2022-04-19 18:41:40 · 645 阅读 · 0 评论 -
剑指 Offer II 036. 后缀表达式(栈)
剑指 Offer II 036. 后缀表达式(栈)根据 逆波兰表示法,求该后缀表达式的计算结果。有效的算符包括+、-、*、/。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例1:输入:tokens = ["2","1","+","3","*"]输出:9解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9示例2:输入:token原创 2022-04-19 17:56:49 · 1023 阅读 · 0 评论 -
剑指 Offer II 017. 含有所有字符的最短字符串(双指针)
剑指 Offer II 017. 含有所有字符的最短字符串(双指针)执行用时 2ms。给定两个字符串 s 和t 。返回 s 中包含t的所有字符的最短子字符串。如果 s 中不存在符合条件的子字符串,则返回空字符串 "" 。如果 s 中存在多个符合条件的子字符串,返回任意一个。注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。示例 1:输入:s = "ADOBECODEBANC", t = "ABC"输出:"BANC" 解释:最短子原创 2022-04-13 23:08:30 · 666 阅读 · 0 评论 -
剑指 Offer II 014. 字符串中的变位词(滑动窗口与双指针好例题)
剑指 Offer II 014. 字符串中的变位词给定两个字符串s1和s2,写一个函数来判断 s2 是否包含 s1的某个变位词。换句话说,第一个字符串的排列之一是第二个字符串的 子串 。示例 1:输入: s1 = "ab" s2 = "eidbaooo"输出: True解释: s2 包含 s1 的排列之一 ("ba").示例 2:输入: s1= "ab" s2 = "eidboaoo"输出: False提示:1 <= s1.length, s2.lengt原创 2022-04-12 17:33:21 · 2109 阅读 · 1 评论 -
剑指 Offer II 013. 二维子矩阵的和(前缀和)
剑指 Offer II 013. 二维子矩阵的和(前缀和)给定一个二维矩阵 matrix,以下类型的多个请求:计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1,col1) ,右下角为 (row2,col2) 。实现 NumMatrix 类:NumMatrix(int[][] matrix)给定整数矩阵 matrix 进行初始化int sumRegion(int row1, int col1, int row2, int col2)返回左上角 (row1,col1)、右下原创 2022-04-11 23:43:14 · 578 阅读 · 0 评论 -
剑指 Offer II 008. 和大于等于 target 的最短子数组(滑动窗口)
剑指 Offer II 008. 和大于等于 target 的最短子数组(滑动窗口)给定一个含有n个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组[numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例 1:输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组[4,3]是该条件下的长度最小的子数组。原创 2022-04-11 00:11:33 · 234 阅读 · 0 评论 -
剑指 Offer II 005. 单词长度的最大乘积(位运算)
剑指 Offer II 005. 单词长度的最大乘积(位运算)给定一个字符串数组words,请计算当两个字符串 words[i] 和 words[j] 不包含相同字符时,它们长度的乘积的最大值。假设字符串中只包含英语的小写字母。如果没有不包含相同字符的一对字符串,返回 0。示例1:输入: words = ["abcw","baz","foo","bar","fxyz","abcdef"]输出: 16 解释: 这两个单词为 "abcw", "fxyz"。它们不包含相同字符,且长度的乘积原创 2022-04-09 16:27:30 · 153 阅读 · 0 评论 -
剑指 Offer II 003. 前 n 个数字二进制中 1 的个数
剑指 Offer II 003. 前 n 个数字二进制中 1 的个数给定一个非负整数 n ,请计算 0 到 n 之间的每个数字的二进制表示中 1 的个数,并输出一个数组。示例 1:输入: n = 2输出: [0,1,1]解释: 0 --> 01 --> 12 --> 10示例2:输入: n = 5输出: [0,1,1,2,1,2]解释:0 --> 01 --> 12 --> 103 --> 114 --> 1005 --> 101原创 2022-04-08 22:36:57 · 61 阅读 · 0 评论 -
剑指 Offer II 002. 二进制加法(模拟)
剑指 Offer II 002给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。输入为 非空 字符串且只包含数字 1 和 0。示例 1:输入: a = “11”, b = “10”输出: “101”示例 2:输入: a = “1010”, b = “1011”输出: “10101”提示:每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。1 <= a.length, b.length <= 10^4字符串如果不是 “0”,就原创 2022-04-08 22:16:47 · 82 阅读 · 0 评论 -
剑指 Offer II 001. 整数除法
剑指 Offer II 001. 整数除法题目给定两个整数 a 和 b ,求它们的除法的商 a/b ,要求不得使用乘号 ‘*’、除号 ‘/’ 以及求余符号 ‘%’ 。注意:整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335)= -2 假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231−1]。本题中,如果除法结果溢出,则返回 231 − 1示例 1:输入:a = 15,原创 2022-04-08 22:03:45 · 348 阅读 · 0 评论 -
剑指 Offer 51. 数组中的逆序对(归并排序)
剑指 Offer 51. 数组中的逆序对(归并排序)在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例 1:输入: [7,5,6,4]输出: 5限制:0 <= 数组长度 <= 50000利用归并排序解析原创 2022-04-05 19:52:34 · 182 阅读 · 0 评论 -
剑指 Offer 38. 字符串的排列(回溯法)
剑指 Offer 38. 字符串的排列(回溯法)输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = "abc"输出:["abc","acb","bac","bca","cab","cba"]限制:1 <= s 的长度 <= 8原创 2022-04-03 21:08:03 · 445 阅读 · 0 评论 -
剑指 Offer 59 - I. 滑动窗口的最大值
剑指 Offer 59 - I. 滑动窗口的最大值给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值[1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 3 1 3 [-1 -3 5] 3 6 7 5 1 3原创 2022-04-02 21:29:34 · 339 阅读 · 0 评论 -
顺时针打印矩阵(模拟)
顺时针打印矩阵(模拟)输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制:0 <= matrix.length <= 100 0 <= matri原创 2022-03-31 17:14:44 · 67 阅读 · 0 评论 -
剑指 Offer 57 - II. 和为s的连续正数序列(滑动窗口)
剑指 Offer 57 - II. 和为s的连续正数序列(滑动窗口)输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9 输出:[[2,3,4],[4,5]]示例 2:输入:target = 15 输出:[[1,2,3,4,5],[4,5,6],[7,8]]限制: 1 <= target <= 10^5原创 2022-03-30 21:38:02 · 61 阅读 · 0 评论 -
剑指 Offer 66. 构建乘积数组
剑指 Offer 66. 构建乘积数组给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B[i] 的值是数组 A 中除了下标 i> 以外的元素的积, 即 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。> 示例:> 输入: [1,2,3,4,5] > 输出: [120,60,40,30,24]> 提示: 所有元素乘积之和不会溢出 32 位整数> a.length <= 100000原创 2022-03-29 23:14:17 · 108 阅读 · 0 评论 -
数组中数字出现的次数Ⅰ,Ⅱ(位运算)
数组中数字出现的次数一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例 1:输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]数组中数字出现的次数 II在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。示例 1:输入:nums = [3,4,3,3]输出:4原创 2022-03-28 20:59:17 · 617 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
二叉搜索树的后序遍历序列原创 2022-03-27 22:50:50 · 608 阅读 · 0 评论 -
两数之和 IV - 输入 BST(两数之和要联想到hash)
两数之和 IV - 输入 BST原创 2022-03-26 23:38:26 · 524 阅读 · 0 评论 -
二叉搜索树与二叉树的最近公共祖先
二叉搜索树与二叉树的最近公共祖先原创 2022-03-26 00:31:08 · 463 阅读 · 0 评论 -
剑指 Offer 64. 求1+2+…+n
剑指 Offer 64. 求1+2+…+n原创 2022-03-25 23:38:00 · 37 阅读 · 0 评论 -
数据流中的中位数
数据流的中位数原创 2022-03-24 19:11:36 · 3309 阅读 · 0 评论 -
把数组排成最小的数
把数组排成最小的数原创 2022-03-23 20:16:41 · 64 阅读 · 0 评论