赞
踩
目录
34.在排序数组中查找元素的第一个和最后一个位置
793.阶乘函数后K个零
875.爱吃香蕉的珂珂
思路:
根据要求写出寻找目标值的函数。
然后再利用二分法在给定范围内找到答案。
当有多个值满足要求时,可以写出寻找最左边或者最右边的二分法。
注:找左边界和右边界的方法不太一样。
3.无重复字符的最长子串 滑动窗口+hash
善于应用Math.max工具可以让代码简洁很多
438.找到字符串中所有字母异位词
567.字符串的排列
当Ineteger是一个对象,当需要比较两个Ineteger时不可以直接使用“==”,而是需要.equals() 或者用intValue()转换为int类型再进行比较。
239.滑动窗口最大值 - 滑动窗口 + 单调队列
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个升序链表
当需要对"一长串"的数据(例如:数组)进行处理时,分治方法需要的时间复杂度要比遍历一遍小。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。