![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
回首往昔少年
这个作者很懒,什么都没留下…
展开
-
二分查找
参考liweiwei1419的讲解思路一:在循环体中查找元素先看位于数组中间的那个元素的值:如果中间的那个元素正好等于目标元素,我们就可以直接返回这个元素的下标;否则我们就需要在中间这个元素的左边或者右边继续查找。public class Solution { // 「力扣」第 704 题:二分查找 public int search(int[] nums, int target) { int len = nums.length;转载 2020-09-26 15:14:07 · 172 阅读 · 0 评论 -
力扣刷题——双指针
有序数组的 Two Sum力扣167Input: numbers={2, 7, 11, 15}, target=9Output: index1=1, index2=2使用双指针,一个指针指向值较小的元素,一个指针指向值较大的元素。指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。如果两个指针指向元素的和 sum == target,那么得到要求的结果;如果 sum > target,移动较大的元素,使 sum 变小一些;如果 sum < target,移动较小的元原创 2020-09-08 08:28:04 · 261 阅读 · 0 评论 -
字符串相关
两个字符串包含的字母是否完全相同力扣242由于本题的字符串只包含 26 个小写字符,因此可以使用长度为 26 的整型数组对字符串出现的字符进行统计,不再使用 HashMap。class Solution { public boolean isAnagram(String s, String t) { int[] num = new int[26]; for (char c : s.toCharArray()) { num[c - 'a']原创 2020-08-29 23:41:06 · 254 阅读 · 0 评论 -
将BST变平衡(手撕AVL树)
力扣1382什么是平衡二叉树(AVL)——知乎[平衡二叉树(博客园)](https://www.cnblogs.com/huangxincheng/archive/2012/07/22/2603956.html)强调,手撕AVL并不是最优解,只是通解,时间复杂度是nlog(n)。利用二叉搜索树的性质,中序遍历输出,然后以中间为root,递归构造树,效率更高,算是本题的最优解。提交时发现,必须初始化叶子节点高度为1,0也不行public AVLNode(int val){ this原创 2020-08-22 10:57:30 · 496 阅读 · 0 评论 -
栈和队列
用栈实现队列leetcode232栈的顺序为后进先出,而队列的顺序为先进先出。使用两个栈实现队列,一个元素需要经过两个栈才能出队列,在经过第一个栈时元素顺序被反转,经过第二个栈时再次被反转,此时就是先进先出顺序。class MyQueue { private Stack<Integer> in; private Stack<Integer> out; /** Initialize your data structure here. */原创 2020-08-22 09:55:01 · 150 阅读 · 0 评论 -
回溯入门问题——全排列
全排列(Medium)力扣46class Solution { private List<List<Integer>> res = new LinkedList<>(); public List<List<Integer>> permute(int[] nums) { LinkedList<Integer> track = new LinkedList<>(); dfs(转载 2020-08-18 11:39:30 · 137 阅读 · 0 评论 -
字符串查找——初窥KMP算法
参考知乎参考bilibiliKMP算法的核心,是一个被称为**部分匹配表(Partial Match Table)**的数组。我觉得理解KMP的最大障碍就是很多人在看了很多关于KMP的文章之后,仍然搞不懂PMT中的值代表了什么意思。这里我们抛开所有的枝枝蔓蔓,先来解释一下这个数据到底是什么。对于字符串“abababca”,它的PMT如下表所示:就像例子中所示的,如果待匹配的模式字符串有8个字符,那么PMT就会有8个值。字符串前缀和后缀:如果字符串A和B,存在A=BS,其中S是任意的非空字符串,原创 2020-08-10 21:53:50 · 225 阅读 · 0 评论 -
间隔遍历(动态规划)
间隔遍历(打家劫舍III)力扣337 3 / \ 2 3 \ \ 3 1Maximum amount of money the thief can rob = 3 + 3 + 1 = 7.暴力递归思路:对于一个以 node 为根节点的二叉树而言,如果尝试偷取 node 节点,那么势必不能偷取其左右子节点,然后继续尝试偷取其左右子节点的左右子节点。如果不偷取该节点,那么只能尝试偷取其左右子节点。比较两种方式的结果,谁大取谁。原创 2020-08-10 21:51:46 · 346 阅读 · 0 评论 -
二叉树
文章目录deque与链表、栈、队列的关系树的高度deque与链表、栈、队列的关系在Java中,我们用Deque可以实现Stack的功能,注意只调用push()/pop()/peek()方法,避免调用Deque的其他方法。我们可以发现Deque是继承自Queue,而Stack是继承自Vector,这就比较奇怪了。Vector是由数组实现的集合类,他包含了大量集合处理的方法。而Stack之所以继承Vector,是为了复用Vector中的方法,来实现进栈(push)、出栈(pop)等操作。这里就是S原创 2020-08-08 22:53:30 · 276 阅读 · 0 评论 -
链表
文章目录相交链表反转链表CS-Notes相交链表#160设 两条链表分别为A,B;若两条链表有交点,A的长度为a+c,B的长度为b+c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a。当访问 A 链表的指针访问到链表尾部时,下一个结点为null,令它从链表 B 的头部开始访问链表 B;同样地,当访问 B 链表的指针访问到链表尾部时,令它从链表 A 的头部开始访问链表 A。这样就能控制访问 A 和 B 两个链表的指针能同时访问到交点。如果不存在交点,那么 a +原创 2020-07-17 11:56:13 · 121 阅读 · 0 评论 -
LeetCode刷题技巧
虽然大多数经验你们大概也在互联网的这里或那里看过,不过我还是摆在这里吧。更系统一些,也许能帮到一些朋友:最重要的是行动,现在立刻马上就去开始刷题。一看二抄三改四写。前期博客、文档、ppt比算法原理书重要。如果要学会用算法,书不够看也没必要,应该刷题。刷题时,首先还是要有方向、有脉络地刷题,切忌乱打拳,也就是要刷专题,刷专题就是说,找同类的题(一次只针对一种题型进行训练,如数组、链表、二叉树...原创 2020-01-15 20:50:23 · 1055 阅读 · 1 评论