
lankeren2021czc
lankerens
日常抄代码并给大佬点赞
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
笔试题: 输入任意一种物质,要求输出其每种元素的数量 ( 栈 + 模拟 + 括号匹配)
输入任意一种物质,要求输出其每种元素的数量。原创 2023-02-14 21:00:51 · 833 阅读 · 2 评论 -
1300. 转变数组后最接近目标值的数组和( 二分 )
LeetCode:1300. 转变数组后最接近目标值的数组和看完题目很容易想到二分枚举 value然后发现难点在于哪个 value 才是最接近 target 的同时更有可能出现的情况是:value 选得小了,「接近程度」变大,而 value 选得大了,「接近程度」变小,反过来也是有可能的, 造成 value 离答案越来越远。所以在选择上限上就特别的讲究了, 不能直接 right = 1e5 , 而是选择数组中出现的最大值如果选择一个阈值 value ,使得它对应的 sum 是第 1 个大原创 2021-01-16 13:09:45 · 102 阅读 · 0 评论 -
297. 二叉树的序列化与反序列化 ( 设计-前序遍历 )
LeetCode:297. 二叉树的序列化与反序列化序列化成 字符串,反序列成对象统一以前序遍历作为生成字符串的格式[1, 2, null, null, 3, 4, null, null, 5, null, null]反序列化的时候, 如果传入数组, idx 做不到一直递增下去生成节点,使用 list 每次使用一个,就删除一个。AC Code/** * Definition for a binary tree node. * public class TreeNode { *原创 2021-01-07 21:01:38 · 203 阅读 · 0 评论 -
79. 单词搜索 ( dfs 回溯 )
LeetCode: 79. 单词搜索dfs 深度优先遍历, 记录访问过的位置, 走不通回溯AC Codeclass Solution { public boolean exist(char[][] b, String w) { // dfs char[] cs = w.toCharArray(); int row = b.length, col = b[0].length; // 枚举 for(int i原创 2021-01-07 20:01:49 · 226 阅读 · 0 评论 -
33. 搜索旋转排序数组 ( 二分查找 )
LeetCode:33. 搜索旋转排序数组一个有序的上升数组, 以某个旋转点进行了旋转最多分成了两部分有序我的解法: 部分二分查找先找出旋转点,然后对后半有序的数组进行二分查找AC Codeclass Solution { public int search(int[] nums, int target) { int idx = 0, right = nums.length - 1; for(int i = 1; i < right + 1;原创 2021-01-07 19:31:05 · 154 阅读 · 0 评论 -
199. 二叉树的右视图 ( 层序遍历 )
LeetCode:199. 二叉树的右视图二叉树的层序遍历, 每遍历一层的时候,将队列中最后的添加进结果集就可以了AC Code/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solut原创 2021-01-07 19:04:50 · 175 阅读 · 0 评论 -
139. 单词拆分 ( dp )
LeetCode: 139. 单词拆分dp 题, 想不到这个解法,我只能想到dfs,暴力搜字符串的题,substring 这个十分重要, 老用到。通过 dp 数组记录字符串匹配到的字典里的起始位置( 变为 true ), 然后如果 i 遍历到了 len >> 说明比对完成,直接return trueAC Codeclass Solution { public boolean wordBreak(String s, List<String> wd) {原创 2020-12-18 19:40:26 · 174 阅读 · 1 评论 -
1014. 最佳观光组合 ( 公式拆分 )
LeetCode:1014. 最佳观光组合观光组合的得分公式为 A[i]+A[j]+i−jA[i]+ A[j] +i - jA[i]+A[j]+i−j拆分成 A[i]+iA[i] + iA[i]+i and A[j]−jA[j] - jA[j]−j分别维护着两个公式的最大值。AC Codeclass Solution { public int maxScoreSightseeingPair(int[] a) { // A[i] + i int ans原创 2020-12-18 15:07:13 · 138 阅读 · 0 评论 -
5. 最长回文子串 (暴力解法)
LeetCode: 5. 最长回文子串题目大意: 找到给定的字符串的最长的回文子串暴力动态规划感觉这个暴力也有点技巧.判断回文 >> 单独一个方法. >> 返回 boolean通过双重循环,截取整个字符串的子串 >> 然后再判断截取的子串是否为回文的。将两步分离开了.AC Code public String longestPalindrome(String s) { if(s == null |原创 2020-11-22 17:17:35 · 959 阅读 · 0 评论 -
56. 合并区间 (贪心)
LeetCode: 56. 合并区间合并区间 >> 想到了视频剪辑 (以及 跳跃游戏)那道贪心题 >> 可以用 贪心算法. 记录当前起点可达的最远端点贪心思路:先找到所有区间可以跳到的最远点 mxlen , 并创建对应的一维数组初始化一维数组, 将当前起跳点的右端点记录合并区间3.0 从 0 到 mxlen 遍历3.1. 如果当前点的右端点与起跳点相同,直接添加到结果集。3.2. 如果起跳点的右端点不是起跳点, 那么[startJump,right][st原创 2020-11-21 13:19:43 · 156 阅读 · 0 评论 -
200. 岛屿数量 (并查集 (路径压缩 + 按秩合并))
LeetCode: 200. 岛屿数量最简单的并查集效率是比较低的 >> 我们需要使用路径压缩 或者 按秩合并并查集( 路径压缩 + 按秩合并 )时间复杂度 nlognn lognnlogn合并(Union):把两个不相交的集合合并为一个集合。查询(Find):查询两个元素是否在同一个集合中。这篇文章讲的挺好的: 算法学习笔记(1) : 并查集介绍了什么是并查集路径压缩按秩合并 >> 简单的树往复杂的树上合并并查集 (路径压缩 + 按秩合并)原创 2020-11-20 22:04:43 · 368 阅读 · 0 评论 -
560. 和为K的子数组.(前缀和 + 哈希表)
LeetCode: 560. 和为K的子数组典型前缀和题目前缀和 + 哈希表. >>. 使用 哈希表 记录各区间和相减的结果情况哈希表更新:经历了几次错误,还是不太会map.put(pre[i] 1); // xmap.put(pre[i], temp + 1); // x正确写法:map.put(pre[i], map.getOrDefault(pre[i], 0) + 1);AC Code public int subarraySum(int原创 2020-11-19 16:00:20 · 214 阅读 · 0 评论 -
146. LRU缓存机制 (基于LinkedHashMap)
LeetCode: 146. LRU缓存机制场景设计class LRUCache extends LinkedHashMap<Integer, Integer>{ private int capacity ; public LRUCache(int capacity) { // true 表示按读取顺序排序 super(capacity, 0.75F, true); this.capacity = capacity;原创 2020-11-18 21:45:20 · 203 阅读 · 0 评论 -
974. 和可被 K 整除的子数组 (前缀和 + 哈希表)
LeetCode: 974. 和可被 K 整除的子数组看到这个数据范围 >> 不应该写一个 O(n2)O(n^2)O(n2) 时间复杂度的代码出来的…这次看到题目想到了前缀和, 没想到 哈希表前缀和 + 哈希表AC Code注意为 负数的时候 >> 需要 (k+K)%K(k+ K )\% K(k+K)%K思路:会发现每个 temptemp % Ktemp 之后, 余数相同的 >> 必定可以被 K 整除那么我们可以通过 map 记录原创 2020-11-18 21:24:33 · 220 阅读 · 0 评论 -
415. 字符串相加
LeetCode: 415. 字符串相加easy 题 >> 正常的两数之和思路 >> 处理进位即可但是写出这种简洁的代码并不 easyAC Code public String addStrings(String num1, String num2) { StringBuffer sb = new StringBuffer(); int i = num1.length() - 1, j = num2.length() -原创 2020-11-18 19:57:58 · 128 阅读 · 0 评论 -
238. 除自身以外数组的乘积 (左右乘积列表)
LeetCode: 238. 除自身以外数组的乘积要求: 不能使用 除法, 在 O(n)O(n)O(n) 时间复杂度内完成左右乘积列表O(n) 时间复杂度 public int[] productExceptSelf(int[] nums) { int len = nums.length; int[] ans = new int[len]; int[] left = new int[len]; int[] right = n原创 2020-11-17 23:40:54 · 164 阅读 · 0 评论 -
15. 三数之和 (排序 + 去重)
LeetCode: 15. 三数之和思路: 类似两数之和先选取一个 (然后就是两数之和的解法)AC Code样例: [−5,−5,−4,−4,−4,−2,−2,−2,0,0,0,1,1,3,4,4][-5, -5, -4, -4, -4, -2, -2, -2, 0, 0, 0, 1, 1, 3, 4, 4][−5,−5,−4,−4,−4,−2,−2,−2,0,0,0,1,1,3,4,4] public List<List<Integer>> threeSu原创 2020-11-17 16:56:03 · 345 阅读 · 0 评论 -
4. 寻找两个正序数组的中位数 (二分(O(logn)))
LeetCode: 4. 寻找两个正序数组的中位数题目大意:在两个给定的排好序(从小到大)数组中,找出中位数要求: 时间复杂度 O(log(m+n))O(log(m+n))O(log(m+n)) >> 二分如果某个数组没有第K/2个数字,那么我们就淘汰另一个数字的前K/2个数字即可。有没有可能两个数组都不存在第K/2个数字呢,这道题里是不可能的,因为我们的K不是任意给的,而是给的m+n的中间值,所以必定至少会有一个数组是存在第K/2个数字的。最后就是二分法的核心啦,比较这原创 2020-11-17 13:53:15 · 254 阅读 · 0 评论 -
3. 无重复字符的最长子串 (哈希表 + 双指针)
LeetCode: 3. 无重复字符的最长子串map模拟 public int lengthOfLongestSubstring(String s) { if(s == null || s.length() == 0) return 0; Map<Character, Integer> map = new HashMap<>(); int slow = 0, fast = 1; int len =原创 2020-11-16 22:26:46 · 121 阅读 · 0 评论 -
1248. 统计「优美子数组」(前缀和)
LeetCode: 1248. 统计「优美子数组」数据范围 >> 50000 >> 需要 O(n)O(n)O(n) 算法前缀和前缀和样例:[2,2,2,1,2,2,1,2,2,2,2]2mp[]=[4,3,5,0,0,0,0,0,0,0,0,0,0]mp[]=[4, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]mp[]=[4,3,5,0,0,0,0,0,0,0,0,0,0] public int numberOfSubarra原创 2020-11-16 21:06:09 · 182 阅读 · 0 评论