08 2023 档案
摘要:题目: 思路: 【1】本质上和 990. 等式方程的可满足性 这题很相似,并交集的方式是最合理的,因为把所有ASCII码值大的字符替换为可以转换的值小的字符,所以并交集产生时候选择父节点需要注意一下,此外每个节点的对等比较其实都是指他们的顶级父节点的对等比较(这个是需要注意的,也就是为什么要取出他们
阅读全文
摘要:题目: 思路: 【1】并交集的方式 由于是只有26个小写字母,所以可以用int数组来表示 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25] 这就表示每个字母当前
阅读全文
摘要:题目: 思路: 【1】可以参考 200. 岛屿数量 这道题,本质上是一样的,只不过这里靠近边缘的陆地不被纳入到计算当中一样。 代码展示: //时间1 ms 击败 100% //内存41.6 MB 击败 99.30% class Solution { public int closedIsland(i
阅读全文
摘要:题目: 思路: 【1】常规的遍历题 代码展示: //时间6 ms 击败 97.46% //内存53.1 MB 击败 74.43% class Solution { public int numEnclaves(int[][] grid) { int m = grid.length, n = grid
阅读全文
摘要:题目: 思路: 【1】计数枚举的方式 【2】贪心的方式,只选取出拥有边最多的节点和次多的节点进行计算 代码展示: 【1】计数枚举的方式 //时间18 ms 击败 26.27% //内存42.8 MB 击败 80.51% class Solution { public int maximalNetwo
阅读全文
摘要:题目: 思路: 【1】模拟的方式 代码展示: //时间2 ms 击败 97.6% //内存47.5 MB 击败 48.76% class Solution { public int findJudge(int n, int[][] trust) { // 标记信任的人数 int[] trustFla
阅读全文
摘要:题目: 思路: 【1】这道题相当于披着中等难度的简单题,因为本质上求得就是入度为0的节点。 代码展示: //时间8 ms 击败 99.57% //内存79 MB 击败 66.96% class Solution { public List<Integer> findSmallestSetOfVert
阅读全文
摘要:题目: 思路: 【1】首先是明确约束 1)「子序列」是不要求连续的; 2)只关心这个子序列的最小值和最大值,而不关心元素的相对顺序; 代码展示: //时间32 ms 击败 75.71% //内存53.1 MB 击败 79.10% class Solution { public int numSubs
阅读全文
摘要:题目: 思路: 【1】无 代码展示: //时间1 ms 击败 100% //内存38.4 MB 击败 90.52% class Solution { public int arrangeCoins(int n) { int left = 1, right = n; while (left < rig
阅读全文
摘要:题目: 思路: 【1】熟悉常规二分查找即可 代码展示: //时间0 ms 击败 100% //内存42.8 MB 击败 94.16% class Solution { public char nextGreatestLetter(char[] letters, char target) { int
阅读全文
摘要:题目: 思路: 【1】常规的二分查找处理 【2】进阶方式的处理(其实可以参考 240. 搜索二维矩阵 II 这篇的 Z 字形查找 ,因为是有序的,所以倒着找会相对更容易一些) 代码展示: 【1】常规的二分查找处理 //正常的二分方式查找第一个负数的下标 //时间0 ms 击败 100% //内存42
阅读全文
摘要:题目: 思路: 【1】常规二分代码 代码展示: //时间0 ms 击败 100% //内存43.1 MB 击败 68.49% class Solution { public int search(int[] nums, int target) { int l = 0 , r = nums.lengt
阅读全文
摘要:题目: 思路: 【1】这种其实常规的会想到树的方式处理,因为每三个数值都是可以作为一个组合,树遍历的方式更加通俗,但是其实可以用双指针的方式进行优化。 代码展示: //时间230 ms 击败 35.95% //内存42 MB 击败 49.31% class Solution { public int
阅读全文
摘要:题目: 思路: 【1】这种其实暴力处理都是可以的,因为本质上两个数组都是无序的,而基于O(N^2),用排序加二分的方式其实可以优化到O(N*longN) 代码展示: 【1】更优的方式(其实就是分了情况进行处理,时间复杂度为O(N)) //时间4 ms 击败 100% //内存60.2 MB 击败 1
阅读全文
摘要:题目: 思路: 【1】这道题其实和 最长严格递增子序列 逻辑是一样的,所以其实可以参考 300. 最长递增子序列 这道题。 因为本质上 : 如数据 [[2, 100], [3, 200], [4, 300], [5, 250], [5, 400], [5, 500], [6, 360], [6, 3
阅读全文
摘要:题目: 思路: 【1】这道题的难度在于int数据会存在溢出的情况,所以用乘法是不可行的,虽然逻辑上能说的通,而且就算换上long类型也一样扛不住啊,所以改用除法,但是除法会有一个问题就是不能除以0【这个需要考虑处理】。 代码展示: //时间0 ms 击败 100% //内存38.2 MB 击败 39
阅读全文
摘要:题目: 思路: 【1】单次遍历的方式 【2】二分的方式优化 代码展示: 【1】单次遍历的方式 //时间0 ms 击败 100% //内存40.4 MB 击败 90.61% //单次遍历的方式 class Solution { public int findKthPositive(int[] arr,
阅读全文
摘要:题目: 思路: 【1】这道题的核心在于找到X的值或者距离X值之间差值最小的值,然后往两边进行扩散,差值最小的优先纳入。 代码展示: //时间3 ms 击败99.5% //内存43.8 MB 击败 79.45% class Solution { public List<Integer> findClo
阅读全文
摘要:题目: 思路: 【1】简单的二分 代码展示: //时间13 ms 击败 94.23% //内存38.1 MB 击败 73.26% /* The isBadVersion API is defined in the parent class VersionControl. boolean isBadV
阅读全文
摘要:题目: 思路: 【1】利用TreeMap解题 1)利用TreeMap来存储snap_id : val,然后再用一个Map来存储index : tree; 2)找index索引下的snap_id版本的值时,只需要找最大的小于等于snap_id版本的值,利用TreeMap.floorEntry(snap
阅读全文
摘要:题目: 思路: 【1】里面自带了个判断函数,所以只要把选中的值塞进去判断即可。 代码展示: //时间0 ms 击败 100% //内存38 MB 击败 78.84% /** * Forward declaration of guess API. * @param num your guess * @
阅读全文
摘要:题目: 思路: 【1】参看题目 25. K 个一组翻转链表 代码展示: //时间0 ms 击败 100% //内存39.1 MB 击败 62.41% /** * Definition for singly-linked list. * public class ListNode { * int va
阅读全文
摘要:题目: 思路: 【1】二分的方式进行查找 【2】Z 字形查找(这个是能说是符合该题的逻辑要求,因为如果小于15,那么必然不可能大于15下面的,所以会退到11,如果比11大则说明第一行 的都不符合,就会落到下一行,相当于每一次操作都会排除一行或者一列) 代码展示: 【1】二分的方式进行查找 //时间6
阅读全文
摘要:题目: 思路: 【0】依据题目可得两个条件 1)同一个字母的必须在一个片段内 2)将所有划分结果按顺序连接,得到的字符串仍然是 s (也就是位置顺序不能变) 【1】利用数量个数来进行贪心 【2】利用下标位置来进行贪心 代码展示: 【1】利用数量个数来进行贪心 //时间1 ms 击败 100% //内
阅读全文
摘要:题目: 思路: 【1】这道题不难,暴力破解也是可以的,但是双循环带来的开销无疑很大的。所以以空间换时间借助辅助空间,那么就要思考辅助空间怎么知道该字符已经被收录了,如数据结构中的contains函数,判断是否在数据结构里面。但是换个角度想想,每个字符其实都是有对应的ASCII码,也就是有表可看,那么
阅读全文
摘要:题目: 思路: 【1】既然说了是O(N),那么基本就是不能用排序了,又要O(N),那么明摆着是要循环,而由于这里可以存在重复数据,但是判断连续却又不一定用得上重复的,所以用哈希表去重,去重完,理想点就是从每个连续的开头进行遍历,那么怎么才算是开头呢,假设要从K值开始遍历,那么K-1不存在就是连续数据
阅读全文
摘要:题目: 思路: 【1】首先遍历是必不可少的,其次Map的辅助空间也是要用的,那么剩下的便是将字符串转成字符数组,然后排序,再转回字符串,用相同字符串作为key存于Map中,便可以是一组数据,然后遍历Map返回,时间复杂度为O(N*Nlog(N)) 【2】换一种思路,字符源于ASCLL码,本质上是有容
阅读全文
摘要:题目: 思路: 【1】递归分解模拟的方式 思考如何分解: 如 3[a]2[bc]3[a2[c]]2[abc]3[cd]efabc3[cd]xyz 其中每个[]都是可以拆分的如 3[a] + 2[bc] + 3[a2[c]] + 2[abc] + 3[cd] + efabc + 3[cd] +xyz
阅读全文
摘要:题目: 思路: 【1】深度搜索 代码展示: //时间0 ms 击败 100% //内存40.5 MB 击败 77.15% /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode
阅读全文
摘要:题目: 思路: 【1】置换的方式(由于0是需要移到后面,倒不如说是非零的要往前挪动,前面有多少个0就需要移动多少格,为了尽量少的动,那么明确的计算出位置只交换一次是最少的,全部非零的都移动完了,也就说明必须要先遍历一遍数组,统计0的个数,和顺便挪动非零的数值,做完了,会发现由于挪动过程中某些0会被覆
阅读全文
摘要:题目: 思路: 【1】利用统计的方式 【2】单指针的方式 【3】双指针的方式(该方式其实算是对单指针的合并) 代码展示: 【1】利用统计的方式 //时间0 ms 击败 100% //内存40.2 MB 击败 12.27% class Solution { public void sortColors
阅读全文
摘要:题目: 思路: 【1】常规的遍历都是要记得 代码展示: //时间0 ms 击败 100% //内存39.8 MB 击败 33.10% //递归的方式 /** * Definition for a binary tree node. * public class TreeNode { * int va
阅读全文
摘要:题目: 思路: 【1】利用数组下标映射的方式来做 【2】更简单的置换方式 代码展示: 【1】利用数组下标映射的方式来做 //时间1 ms 击败 97.45% //内存57.8 MB 击败 34.15% //时间复杂度:O(N),其中 N 是数组的长度。 //空间复杂度:O(1)。 class Sol
阅读全文
摘要:题目: 思路: 【1】前置尝试 【2】利用快慢指针检测环的方式(关键是要理解如何将输入的数组看作为链表) 将数组下标 n 和数 nums[n] 建立一个映射关系 f(n): 1)数组中没有重复的数以数组 [1,3,4,2]为例: 其映射关系 n->f(n)为: 0->1 , 1->3 , 2->4
阅读全文
摘要:题目: 思路: 【1】广度搜索处理感染问题 代码展示: //时间1 ms 击败 100% //内存39.9 MB 击败 91.75% class Solution { /** * 坏橘子感染好橘子,就是扩散的方式,这种用广度搜索的方式是最好处理的 * @param grid * @return */
阅读全文
摘要:题目: 思路: 【1】动态规划的方式 【2】数学公式的方式(依据 四平方和定理 ) 同时四平方和定理包含了一个更强的结论: 当且仅当 n≠4^k×(8m+7) 时,n 可以被表示为至多三个正整数的平方和。 因此,当 n=4^k×(8m+7) 时,n 只能被表示为四个正整数的平方和。此时我们可以直接返
阅读全文
摘要:题目: 思路: 【1】模拟的方式 杨辉三角形本质上可以转换成这种形式 0:1 1:1 1 2:1 2 1 3:1 3 3 1 这里存在规律,就是首尾都必须是1, 且中间部分的值为 当第三层的时候 下标为1的3的值是由第二层的下标0+下标1的值组合成的 故A[3][1] = A[2][0] + A[2
阅读全文
摘要:题目: 思路: 【1】利用广度搜索,相当于向四个方向各自分一个分身去走,碰到障碍物则该分身消失,然后每个分身到了下个位置再次分出四个走下一个位置,这样每一层的分身的步数其实是一致的,当有一个分身到了边界,那么这个位置就是最短的路径的出口。 代码展示: //时间5 ms 击败 61.7% //内存44
阅读全文
摘要:题目: 思路: 【1】利用深度优先搜索求出其中的一座岛,然后利用广度优先搜索来找到两座岛的最短距离 我们通过遍历找到数组 grid 中的 1 后进行深度优先搜索,此时可以得到第一座岛的位置集合,记为 island,并将其位置全部标记为 −1。 随后我们从 island 中的所有位置开始进行广度优先搜
阅读全文