![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
lankerenFrequency
lankerens
日常抄代码并给大佬点赞
展开
-
1. 两数之和 ( 哈希表 )
LeetCode: 1. 两数之和哈希表一开始我还想着 dfs >> 人傻了吧这明显 哈希表 来的实在AC Codeclass Solution { public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> map = new HashMap<>(); int len = nums.length; for(int i =原创 2020-12-10 19:29:28 · 184 阅读 · 0 评论 -
198. 打家劫舍 ( dp )
LeetCode: 198. 打家劫舍不是贪心, dp 题dp数组定义为可以获取的最大利益AC Codeclass Solution { public int rob(int[] nums) { if(nums == null || nums.length == 0) return 0; if(nums.length == 1) return nums[0]; int mx = Math.max(nums[0], nums[1]);原创 2020-12-10 11:45:52 · 134 阅读 · 0 评论 -
9. 回文数 ( 模拟 )
LeetCode: 9. 回文数要求: 整数不能转换为字符串。拆分位数即可AC Codeclass Solution { public boolean isPalindrome(int x) { if(x < 0) return false; int len = 0; int n = x; while(n != 0) { n /= 10; len++;原创 2020-12-10 01:45:34 · 139 阅读 · 0 评论 -
351. 安卓系统手势解锁 ( dfs 回溯 )
LeetCode: 351. 安卓系统手势解锁回溯 dfs 题AC Codeclass Solution { public int numberOfPatterns(int m, int n) { // 按键 boolean[] vis = new boolean[10]; // 键盘 int[][] map = new int[10][10]; //这个 map 数组是为了记录跳跃的点数,比如说从1到3原创 2020-12-09 13:34:26 · 211 阅读 · 0 评论 -
407. 接雨水 II ( 优先队列思想 )
LeetCode: 407. 接雨水 II这道题有点意思。维护周围一个圈,用堆来维护周围这一圈中的最小元素。为什么是维护最小的元素不是最大的元素呢,因为木桶原理呀。这个最小的元素从堆里弹出来,和它四个方向的元素去比较大小,看能不能往里灌水,怎么灌水呢,如果用方向就比较复杂了,我们可以用visited数组来表示哪些遍历过,哪些没遍历过。如果当前弹出来的高度比它周围的大,他就能往矮的里面灌水了,灌水后要把下一个柱子放进去的时候,放的高度要取两者较大的,也就是灌水后的高度,不是它原来矮的时候的高度了,如原创 2020-12-09 12:35:49 · 215 阅读 · 0 评论 -
25. K 个一组翻转链表 (局部反转)
LeetCode: 25. K 个一组翻转链表常数额外空间,反转链表 >> 用指针原地反转有一说一, 这道链表题 >> 还挺难的。注意点;创建头节点 >> hair理清思路AC Code/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode()原创 2020-12-09 11:28:27 · 138 阅读 · 0 评论 -
21. 合并两个有序链表 (双指针)
LeetCode: 21. 合并两个有序链表归并排序 >> 一条链表 >> 时间复杂度 >> O(nlogn)这里合并两条链表 >> 双指针就行,谁小接谁双指针/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * Lis原创 2020-12-09 09:51:26 · 381 阅读 · 0 评论 -
41. 缺失的第一个正数 (原地哈希-抽屉原理)
LeetCode: 41. 缺失的第一个正数相应的类似题目还有:博客指路:442. 数组中重复的数据 ( 抽屉原理 )448. 找到所有数组中消失的数字( 抽屉原理 )哈希表 ( 从 1 到 n + 1 遍历,查看 哈希表中是否存在, 不存在直接返回即可二分查找 ( 排序 logn 、之后从 1 到 n 遍历查找,找不到直接返回优化的二分查找 ( 排序 logn、之后遍历数组, 找到第一个突变的数 >> 即 arr[i]>=0arr[i] >= 0arr[原创 2020-12-05 11:55:51 · 188 阅读 · 0 评论 -
448. 找到所有数组中消失的数字( 抽屉原理 )
LeetCode: 448. 找到所有数组中消失的数字类似题:博客指路: 442. 数组中重复的数据 ( 抽屉原理 )抽屉原理将数组中的 val 放入到 val - 1的下标中。最后消失的数字就是 index!=val−1index != val - 1index!=val−1 的抽屉原理func findDisappearedNumbers(nums []int) []int { var ans []int for i, _ := range nums {原创 2020-12-05 11:30:32 · 165 阅读 · 0 评论 -
442. 数组中重复的数据 ( 抽屉原理 )
LeetCode: 442. 数组中重复的数据核心条件 : 其中1 ≤ a[i] ≤ n (n为数组长度)思路分析:“桶排序”的思想是“抽屉原理”,即“一个萝卜一个坑”,8 个萝卜要放在 7 个坑里,则至少有 1 个坑里至少有 2 个萝卜。这里由于数组元素限定在数组长度的范围内,因此,我们可以通过一次遍历:让数值 1 就放在索引位置 0 处;让数值 2 就放在索引位置 1 处;让数值 3 就放在索引位置 2 处;……一次遍历以后,那些“无处安放”的元素就是我们要找的“出现两次的元素”。原创 2020-12-05 11:20:47 · 290 阅读 · 0 评论 -
718. 最长重复子数组 ( dp )
LeetCode: 718. 最长重复子数组dp 题class Solution { public int findLength(int[] a, int[] b) { int m = a.length, n = b.length; int[][] dp = new int[m + 1][n + 1]; int mx = 0; for(int i = 0; i < m; i++){ for原创 2020-12-02 22:13:13 · 105 阅读 · 0 评论 -
1206. 设计跳表(设计题 - 参考 Redis 中的实现)
LeetCode: 1206. 设计跳表做题之前,首先理解跳表是什么东西: 深入理解跳跃链表[一]根据大佬的代码抄了一遍 : 设计跳表 - 参考 Redis 中的实现思路: >> 待补设计跳表 - 参考 Redis 中的实现class Skiplist { private static final float SKIPLIST_P = 0.5f; private static final int MAX_LEVEL = 16; Node h原创 2020-11-30 22:06:30 · 195 阅读 · 0 评论 -
42. 接雨水 (左右双指针)
LeetCode: 42. 接雨水又成功忘记一题我记得我之前好像是做过这题的, 接雨水 >> 双指针解法, 说实话不记得怎么做了。。。而且博客、题目的提交记录也没相关记录, 太神奇了。。只找到了这题的记录, 博客指路: 11. 盛最多水的容器题目概述: 能接到多少雨水, 数组表示高度暴力法O(N2)O(N^2)O(N2)思路:枚举每根柱子, 之后从该柱子起, 从左从右找到最大值。比较左最大值 与 右最大值, 取较小的一个减去当前柱子, 结果累加到 ans返回 a原创 2020-11-29 23:18:21 · 234 阅读 · 0 评论 -
面试题 17.24. 最大子矩阵 (降维枚举 / 降维动态规划)
LeetCode: 面试题 17.24. 最大子矩阵不理解 >> 待补AC Codeclass Solution { public int[] getMaxMatrix(int[][] matrix) { int row = matrix.length, col = matrix[0].length; int[] ans = new int[4]; int res = Integer.MIN_VALUE;原创 2020-11-27 23:42:53 · 268 阅读 · 0 评论 -
1564. 把箱子放进仓库里 I ( 贪心 )
LeetCode: 1564. 把箱子放进仓库里 I题目稍长 (因为样例解释的比较详细)大意就是: 给定两个数组,boxes 数组是一组箱子, war 数组是一组房子, 现在保持 war 数组顺序不变,可以任意调整 boxes 数组的顺序, 最多可以塞进多少个箱子。其实贪心题里面很多都有思维的参杂。 用来帮助贪心思路:这里先将 boxes 从小到大排序。然后对房子数组进行遍历,如果前一个比后一个矮, 则后一个更新为前一个矮的。 因为当前能通过房子的高度取决于他(本身)与之前的最小高度原创 2020-11-26 23:39:42 · 262 阅读 · 0 评论 -
1371. 每个元音包含偶数次的最长子字符串 ( 异或前缀和 )
LeetCode: 1371. 每个元音包含偶数次的最长子字符串这道题值得深究,太妙了这道题。根据 5 个元音 >> 每个元音对应奇偶一种状态, 那么创建一个 32 长度的数组 >> 25=322^5 = 3225=32如果[0,i][0, i][0,i] 得到的状态与 [0,j][0, j][0,j] 得到的状态相同, 那么就说明了 [i+1,j][i + 1, j][i+1,j] 这个区间内的状态一定是 0 , 也就是元音出现的次数为偶数次。通过这个前缀和数组原创 2020-11-25 23:35:50 · 189 阅读 · 0 评论 -
440. 字典序的第K小数字 (字典序-十叉树的前序遍历)
LeetCode: 440. 字典序的第K小数字题目解法: 字典序(树)ddl 题解: 十叉树最重要的能力就是迅速抽象问题、拆解问题的能力。字典序(树):根据每个数的前缀的大小来进行比较排序。前缀小的排在前面这样构建一颗 10 叉树发现, 字典序排列也就是对这个 10 叉树的 前序遍历。1, 10, 100, 101,…AC Code理解基本写在注释上了 public int findKthNumber(int n, int k) { int原创 2020-11-25 21:52:09 · 287 阅读 · 0 评论 -
53. 最大子序和 (dp)
LeetCode: 53. 最大子序和说实话 , 看完题面完全想不到 dp, 我又想到 前缀和 去了。。。入门级 dp状态定义: dp[i]dp[i]dp[i] 为第 i 之前能取到的连续子区间的最大和。转移方程: dp[i]=max(dp[i−1]+nums[i],nums[i])dp[i] = max(dp[i - 1] + nums[i], nums[i])dp[i]=max(dp[i−1]+nums[i],nums[i])初始化: dp[0]=nums[0]dp[0] = nums[原创 2020-11-23 21:49:22 · 119 阅读 · 0 评论 -
1226. 哲学家进餐 (场景 / 破坏死锁条件)
LeetCode: 1226. 哲学家进餐题目大意:一共有0,1,2,3,40,1,2,3,40,1,2,3,4 五个哲学家,他们之间都只有思考问题和进餐两个动作。而进餐时需要同时持有左右两边的叉子才能完成进餐。需要我们控制线程的的并行访问,使所有的哲学家都达到了 n 次进餐当每个哲学家都持有自己右边的叉子, 这样就会造成互相阻塞等待,出现死锁。题目的主要思想就是避免死锁的出现。小贴士:回顾避免死锁的四个条件;循环等待条件 (互相持有资源而等待彼此的释放)请求与保持条件不可原创 2020-11-23 21:40:59 · 3836 阅读 · 2 评论 -
LCP 22. 黑白方格画 (数学 排列组合)
LeetCode: LCP 22. 黑白方格画题目大意给定一个 n * n 的棋盘, 然后我们需要涂任意数量的行数 或者 任意数量的列数,使得棋盘中的黑色格子数量为 k思路:看到这个数据范围, 这道题应该是用暴力就能解决了,不需要太注重算法的选择。看了下题解区 >> 得到方向 >> 需要用到数学的排列组合原来数学 + 排列组合比如在 4*4 的棋盘中,我们需要涂满 12 个格子棋盘:1 1 1 11 1 1 11 1 1 11 1 1 1我们可原创 2020-11-23 20:48:17 · 584 阅读 · 0 评论