摘要:
300、最长递增子序列 第一种方法 基本思想: 动态规划 具体实现: 1、确定状态 (1)最后一步 以nums[i]这个数结尾的最长递增子序列的长度,设为dp[i] (2)化为子问题 比nums[i]小的之前的nums为结尾的最长递增子序列的长度 2、转移方程 dp[i] = max(dp[i], 阅读全文
摘要:
509、斐波那契数列 基本思想: 动态规划,滚动数组思想 具体实现: 动态递归五部: 1.确定dp数组以及下标的含义 dp[i]的定义为:第i个数的斐波那契数值是dp[i] 2.确定递推公式 状态转移方程dp[i] = dp[i - 1] + dp[i - 2] 3.dp数组如何初始化 dp[0] 阅读全文
摘要:
206、反转链表 基本思想: 双指针迭代 具体实现: 1、申请两个指针,一个叫pre,一个叫cur cur代表的是当前节点,pre是cur的前一个节点 刚开始,pre指向null,cur是第一个节点 然后cur和pre共同往后走, cur每走完一步就要指向pre cur变成none了,就迭代完了 2 阅读全文
摘要:
234、判断是否是回文链表 一、递归法,空间复杂度太大,不采用, 但是要会递归是如何进行的,恶心死我了 https://leetcode-cn.com/problems/palindrome-linked-list/solution/hui-wen-lian-biao-by-leetcode-sol 阅读全文
摘要:
239、滑动窗口最大值 基本思想: 需要实现一个队列,这个队列中放入窗口里的元素, 随着窗口的移动,队列也一进一出, 每次移动之后,队列头显示里面的最大值 具体实现: 1.单调队列(递增或递减) 队列中列表中的元素永远是单调递减的,第一个值永远是最大的, 进来一个比第一个值还大的值以后 就把新进来的 阅读全文
摘要:
496.下一个最大元素I 基本思想: 先对num1中每一个元素他的下一个最大元素对应的写成个字典, 再将num2中每一个元素在字典中找到对应的value放到一个列表中 具体实现: stack是栈 stack[-1]是列表中最后一个元素 stack.pop()弹出的是最后一个元素 出栈 stack.a 阅读全文
摘要:
146.LRU缓存机制 基本思想: 需要做到两点: 1. 快读找到某个key是否有对应的val。(用字典) 2. 要支持在任意的位置快速插入和删除元素。(用链表) 结合起来就是哈希链表 使用双向链表和哈希表结合 为什么使用双向链表? 具体实现: 规定越靠近头部是最新的元素,越靠近尾部是越旧的元素 代 阅读全文