随笔分类 - 题解
这里有牛客、洛谷、力扣等oj的题解
摘要:1047. 删除字符串中的所有相邻重复项 题目来源 1047. 删除字符串中的所有相邻重复项 思路 方法一 用栈的思想,数组来实现 class Solution { public String removeDuplicates(String s) { char[] cs = s.toCharArra
阅读全文
摘要:132. 分割回文串Ⅱ 题目来源 132. 分割回文串 II 思路 方法一 动态规划 class Solution { public int minCut(String s) { int len = s.length(); char[] cs = s.toCharArray(); // 预处理是不是
阅读全文
摘要:300. 最长递增子序列 题目来源 300. 最长递增子序列 思路 方法一 动态规划 创建一个一维的dp数组,用来记录当前位置为结尾时,最长的递增子序列的长度为多少。 class Solution { public int lengthOfLIS(int[] nums) { int len = nu
阅读全文
摘要:题目来源 131. 分割回文串 思路 方法一 dfs 以截取的字符子串是否符合条件,是否是回文串,来判断是否构成一条分支。 如果是回文串,就将这一子串添加到路径中,并开始下一轮搜索。 如果搜索的下标等于字符串长度,就代表搜索完了,将路径添加到答案中。 可以根据树形结构来理解dfs中的for循环 本题
阅读全文
摘要:题目来源 781. 森林中的兔子 思路 方法一 统计分配 用Map统计说同一个数字的兔子有几只。如果说同一个数字,定义为 \(color\) ,的兔子的个数,定义为 \(t\) , 如果 \(t \le color\),那么该颜色兔子的数量 \(ans = color+1\) 如果 $t > col
阅读全文
摘要:题目来源 503. 下一个更大元素 II 思路 如果直接通过暴力求解的话,对于每一个元素都要去寻找比他更大的元素,时间复杂度将会变成 \(O(N^2)\) 。所以得想办法优化。 我们可以发现,如果数组的前半部分是单调不增的,那么就会由恨得的计算资源的浪费。比如说 [6,5,4,3,8] ,对于前面的
阅读全文
摘要:题目来源 232. 用栈实现队列 思路 方法一 双栈 创建两个栈,一个为入栈,一个为出栈。 队列是按照先进先出的原则执行的。 当队列执行入队操作,我们将入队的元素添加到入栈中。 当队列执行出队操作,我们首先要把入栈中的元素根据栈的先进后出原则,添加到出栈中,然后再将出栈中的栈顶元素弹出。 **注意:
阅读全文
摘要:题目来源 338. 比特位计数 思路 方法一 暴力解法 class Solution { public int[] countBits(int num) { int[] ans = new int[num+1]; for(int i = 0;i<=num;i++){ ans[i] = count(i
阅读全文
摘要:题目来源 二维区域和检索 - 矩阵不可变 思路 方法一 一维前缀和 创建m行,n+1列的二位前缀和数组 class NumMatrix { int sum[][]; public NumMatrix(int[][] matrix) { int r = matrix.length; int c = m
阅读全文
摘要:395. 至少有 K 个重复字符的最长子串 题目来源 395. 至少有 K 个重复字符的最长子串 思路 方法一 分治+递归 重点:我们在调用递归函数的时候,把递归函数当做普通函数(黑箱)来调用,即明白该函数的输入输出是什么,而不用管此函数内部在做什么。 借住这道题,来详细理解递归 **递归最基本的是
阅读全文
摘要:1052. 爱生气的书店老板 题目来源 1052. 爱生气的书店老板 思路 方法一 滑动窗口 先遍历一遍,统计老板不生气的时候的顾客总数。并且将当时的顾客数归为0 常规滑动窗口,窗口大小为$X$,维护窗口内数值的最大值。 代码 class Solution { public int maxSatis
阅读全文
摘要:1438. 绝对差不超过限制的最长连续子数组 题目来源 1438. 绝对差不超过限制的最长连续子数组 思路 方法一 滑动窗口+有序集合 使用滑动窗口保持符合条件的子数组,记录最长长度。 使用平衡数,统计当前窗口内的最大值和最小值。 使用left和right两个指针,分别指向滑动窗口的左右两边; ri
阅读全文
摘要:697. 数组的度 题目来源 697. 数组的度 思路 使用哈希表 先遍历一遍数组,记录数组中数字出现的次数,第一次出现的位置,以及最后一次出现的位置。 因为符合条件的数字可能有多个,所以还要进行比较。 我们使用哈希表实现该功能,每一个数映射到一个长度为 3 的数组,==数组中的三个元素分别代表这个
阅读全文
摘要:995. K 连续位的最小翻转次数 题目来源 995. K 连续位的最小翻转次数 思路 方法一、 差分思想 用差分思想来计算当前数字需要翻转的次数。开一个差分数组$diff[A.length+1]$来维护,多开1位,减少溢出判断 A的翻转次数为差分数组$d[i]$的累加和 当需要翻转时,只改变了$d
阅读全文
摘要:765. 情侣牵手 题目来源 765. 情侣牵手 思路 如果一对情侣恰好坐在了一起,并且坐在了成组的座位上,其中一个下标一定是偶数,另一个一定是奇数,并且「偶数的值 + 1 = 奇数的值」。例如编号数对 [2, 3]、[9, 8],这些数对的特点是除以 2(下取整)得到的数相等。 方法一、并查集 将
阅读全文
摘要:题目来源 448. 找到所有数组中消失的数字 思路 方法一 原地修改 由于数组中的数字不会超过数组大小,所以可以在将所有正数作为数组下标,并将对应的数组乘以$-1$变为负数。仍为真数的位置就是没有出现的数字。 例: 原始数组:[4,3,2,7,8,2,3,1] 重置后为:[-4,-3,-2,-7,8
阅读全文
摘要:题目来源 119. 杨辉三角 II 思路 方法一 杨辉三角的性质: 每行数字左右对齐,由1开始逐渐变大再变小,并最终回到1. 第$n$行(从$0$开始编号)的数字有$n+1$项,前$n$行共有$\frac{n(n+1)}{2}$个数。 第$n$行的第$m$个数(从$0$开始编号)可表示为可以被表示为
阅读全文
摘要:题目来源 703. 数据流中的第 K 大元素 题目描述: 设计一个找到数据流中第 k 大元素的类(class)。注意是排序后的第 k 大元素,不是第 k 个不同的元素。 请实现 KthLargest 类: KthLargest(int k, int[] nums) 使用整数 k 和整数流 nums
阅读全文
摘要:题目来源 567. 字符串的排列 思想及算法 双指针,滑动窗口 两个要点: 子串是连续的 第一个字符串不管怎样排序,出现的字符的次数是一定的,所以记录字符出现的频次即可。 一个左指针记录窗口开始位置,一个右指针记录窗口结束位置。 需要两个数组,一个数组用来记录字符串s1出现的次数,另一个数组用来维护
阅读全文
摘要:题目来源 992. K 个不同整数的子数组 题目描述:给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定独立的子数组为好子数组。 思路 恰好包含K种不同整数的子区间 = 最多包含K种整数的子区间 - 最多包含K-1种整数的子区间 利用滑动窗口求最多
阅读全文

浙公网安备 33010602011771号