力扣刷题笔记

目录

1、二分法搜索重点题目

2、滑动窗口重点题目

3、链表双指针重点题目

1、二分法搜索重点题目

34.在排序数组中查找元素的第一个和最后一个位置

793.阶乘函数后K个零

875.爱吃香蕉的珂珂

思路:

根据要求写出寻找目标值的函数。

然后再利用二分法在给定范围内找到答案。

当有多个值满足要求时,可以写出寻找最左边或者最右边的二分法。

注:找左边界和右边界的方法不太一样。

2、滑动窗口重点题目

3.无重复字符的最长子串 滑动窗口+hash

善于应用Math.max工具可以让代码简洁很多

438.找到字符串中所有字母异位词

567.字符串的排列

当Ineteger是一个对象,当需要比较两个Ineteger时不可以直接使用“==”,而是需要.equals() 或者用intValue()转换为int类型再进行比较。

239.滑动窗口最大值 - 滑动窗口 + 单调队列

力扣刷题笔记_第1张图片

 力扣刷题笔记_第2张图片

3、链表双指针重点题目

19.删除链表的倒数第N个结点:

在力扣中,head指的是链表的第一个元素(注意这个现象)。而在对链表进行操作时,一种常用的技巧是添加一个哑节点(dummy node),它的next 指针指向链表的头节点。这样一来,我们就不需要对头节点进行特殊的判断了。

141.环形链表

142.环形链表2

160.相交链表

876.链表的中间结点

下面两种方法时间复杂度都是O(N),但空间复杂度不同。

a.哈希表  O(N)

HashSet实现了Set接口,它不允许集合中出现重复元素。可以利用Set来检测是否存在相同的结点或其他对象

HashMap实现了Map接口,Map接口对键值进行映射。Map中不允许出现重复的键

b.快慢指针 O(1)

可以让慢指针一次前进一位,快指针一次前进两位

234.回文链表

a.链表查找的时间复杂度为O(n),为了快速查找可以将链表的值复制到数组里,这样查找的时间复杂度为O(1)。但是这样会牺牲一些空间的复杂度。

b.可以找到链表的中间节点(快慢指针:快的前进两位,慢的前进一位,慢的就是中心节点),对链表本身进行改进,但这样在并发环境下,函数运行时需要锁定其他线程或进程对链表的访问,因为在函数执行过程中链表会被修改。

92.反转链表2

25.K个一组翻转链表

可以固定住第一个节点,每次让最后一个节点移到前面,则可以实现链表的翻转。

21.合并两个有序链表 - 递归

23.合并K个升序链表

当需要对"一长串"的数据(例如:数组)进行处理时,分治方法需要的时间复杂度要比遍历一遍小。

你可能感兴趣的:(力扣,排序算法,算法,java)