
LeetCode
文章平均质量分 74
爱学习的coder
这是一个时而偷懒,时而爱学习的小小coder,慢慢积累,慢慢成长。他还有一个博客在博客园,那边有最新的随笔。之后会慢慢迁移到CNblog
展开
-
单调队列和Min栈总结
单调队列总结 单调队列是指队列中的元素是按照单调递增或者递减的顺序排列的,一般常用于需要动态求某个范围的最值的情况 单调队列一般使用双向队列来实现,具体实现细节见下面: // 创建单调队列 Deque<Integer> monoQueue = new LinkedList<>(); // 增加元素,从队列尾部增加元素,如果有比当前元素小的则弹出,维持单调队列 // 因为单调队列是为了维护当前范围内的最大值,那么比当前元素小的元素必然不可能是最大值,因此这些元素删除不会有影响 pub原创 2021-09-04 23:08:24 · 206 阅读 · 0 评论 -
二分查找最详细的总结
二分查找详解 二分查找主要有三种变形,找出任意一个相等的元素,找出相等元素的左边界,找出相等元素的右边界(这里还有一种取巧办法,只要找比要找的元素target大一的最左边界的位置减一即可)。 而二分查找又需要注意搜索区间是左闭右开还是全闭区间,因此延伸出循环的结束条件以及在不同条件下如何更新区间,还有最后的返回值的问题,这些都是依赖于搜索区间的。 接下来为了说清楚上面需要考虑的问题,我会首先使用大家最常用的左闭右开区间为例,之后再给出闭区间版本(更简单,好用)。 一、基础版:找出任意一个相等元素的位置 这个原创 2021-09-04 23:07:07 · 941 阅读 · 0 评论 -
1143.Longest Common Subsequence
LeetCode 1143.Longest Common Subsequence 解法一 递归 分析:假设字符串s1和字符串s2的最长公共子序列为lcs,则若从后往前搜索s1和s2时,若s1[i] == s2[j] 必有这个字符在lcs中。否则,若不在lcs中,那么lcs可以加上这个字符变得更长,不符合最长的定义。 class Solution { public int longestCommonSubsequence(String text1, String text2) { in原创 2021-04-14 16:48:00 · 249 阅读 · 0 评论 -
剑指Offer 52. 找两个链表的第一个公共节点
剑指Offer 52. 找两个链表的第一个公共节点 方法一. 常规做法 先确定两个链表的长度,然后让指向长链表的指针先走,走到某个节点,使得从该节点到长链表尾的距离等于锻炼表的长度,然后两指针再同步走,一直走到底,如果走到底则说明不想交,否则在之前应该已经相遇。 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(i原创 2021-04-14 16:45:47 · 129 阅读 · 0 评论 -
剑指Offer 43. 1-n 整数中 1 出现的次数
剑指Offer 43. 1~n 整数中 1 出现的次数 解题思路 思路很简单:分成若干个区间分别计算,同时用一个表记录经常要用到的某些区间1的数目。 为了方便理解下面的分析,我先列举几个易推得的结果: 1位数 0-9: 1个; 2位数 0-99: 20个 = 1位数所有的1(区间0 ~ 9) + 全部两位数所有的1( 区间10 ~ 99分成十位是1和十位是2-9); 具体来说,最高位是1的两位数(即10 ~ 19)全部1的个数:首先每个数的最高位都有1 所以至少有10个(19 - 10 + 1, 或是10原创 2021-04-14 16:36:58 · 183 阅读 · 1 评论