道阻且长,行则将至,走慢一点没关系,不停下就|

Ac_c0mpany丶

园龄:3年7个月粉丝:6关注:3

12 2023 档案

[LeetCode Hot 100] LeetCode111. 二叉树的最小深度
摘要:题目描述 思路 二叉树的最小深度就是第一个叶子节点所在的层数 方法一:前序遍历(递归、dfs) /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeN
2
0
0
[LeetCode Hot 100] LeetCode110. 平衡二叉树
摘要:题目描述 思路 LeetCode104. 二叉树的最大深度 变种 方法一:后序遍历(递归、dfs) /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * Tre
3
0
0
[LeetCode Hot 100] LeetCode543. 二叉树的直径
摘要:题目描述 思路 所谓二叉树的直径,就是左右子树的最大深度之和。 方法一: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right;
1
0
0
[LeetCode Hot 100] LeetCode104. 二叉树的最大深度
摘要:题目描述 思路 熟练掌握二叉树的遍历算法 方法一:层序遍历(迭代)+计数 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right;
6
0
0
[LeetCode Hot 100] LeetCode102. 二叉树的层序遍历
摘要:题目描述 思路 方法一:递归 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * Tree
5
0
0
[LeetCode Hot 100] LeetCode145. 二叉树的后序遍历
摘要:题目描述 思路 递归:额外写一个函数void postOrder(TreeNode node, List res) 迭代: 前序遍历:根 左 右 将前序遍历改造成:根 右 左 然后反转根右左为:左 右 根,即为后序遍历 优化一下: while (!stack.isEmpty()) { TreeNod
2
0
0
[LeetCode Hot 100] LeetCode94. 二叉树的中序遍历
摘要:题目描述 思路 熟练掌握迭代和递归的代码。 递归:额外写一个函数void inOrder(TreeNode node, List res) 迭代:令cur = root,一直往左子树找,找到最后一个左子节点,当cur为空,就开始处理栈顶元素(将栈顶元素加入结果集),随后将cur设置为右子节点,继续执
3
0
0
[LeetCode Hot 100] LeetCode144. 二叉树的前序遍历
摘要:题目描述 思路 熟练掌握迭代和递归的代码。 递归代码:额外写一个函数void preOrder(TreeNode node, List res) 迭代代码:会用到数据结构——栈。先入栈当前节点的右子节点,再入栈左子节点。 方法一:递归 /** * Definition for a binary tr
4
0
0
[LeetCode Hot 100] LeetCode394. 字符串解码
摘要:题目描述 思路 思路: 碰到数字:压入数字栈,注意多位数的情况 碰到字母:直接拼接到res 遇到[:将num和res分别压入栈 遇到]:开始处理栈顶元素 方法一: class Solution { public String decodeString(String s) { int num = 0;
3
0
0
[刷题技巧] 栈和队列相关知识点汇总
摘要:栈主要考察单调栈,队列主要考察优先队列(堆)。 栈和队列(ArrayDeque) 数据结构 ArrayDeque类是双端队列Deque接口的实现类。 Deque的含义是"double ended queue",即双端队列,它既可以当作栈使用,性能优于Stack,也可以当作队列使用,性能优于Linke
13
0
0
[LeetCode Hot 100] LeetCode84. 柱状图中最大的矩形
摘要:题目描述 思路:枚举+优化(单调栈) 先固定矩阵的高。 然后向左向右找到第一个比当前元素值小的元素,确定好左右边界。 对于元素2来说: 向左找到第一个比当前元素值小的元素:1的右边界 向右找到第一个比当前元素值小的元素:3的右边界 枚举每个元素的上边界,确定往左数最远到达哪个边界(即寻找左边第一个比
4
0
0
[LeetCode Hot 100] LeetCode42. 接雨水
摘要:题目描述 思路一:单调栈 柱子的高度递减的时候是装不了水的,当碰到第一个比之前高的柱子才可以装水。 此时计算栈顶索引能装的水: 宽:i - left - 1(这个left为栈顶元素pop之后的peek值) 高:min(height[left], height[i]) - height[top] 该题
5
0
0
[LeetCode Hot 100] LeetCode739. 每日温度
摘要:题目描述 思路:单调递减栈 使用单调栈的模板即可。 根据题意可知,该题使用的是单调递减栈。 问题抽象为:找出数组中右边第一个比我大的元素。 方法一: class Solution { public int[] dailyTemperatures(int[] temperatures) { // 用于
4
0
0
[刷题技巧] 二分查找相关知识点汇总
摘要:二分搜索(binary search)算法 二分搜索算法,又名二分查找算法。 常用的使用场景:寻找一个数字、寻找左侧边界、寻找右侧边界 二分搜索模板 先介绍下二分搜索模板,后面的二分搜索都是基于这个二分搜索模板的 int binarySearch(int[] nums, int targer) {
19
0
0
[LeetCode] LeetCode162. 寻找峰值
摘要:题目描述 思路:同LeetCode852.山脉数组的顶峰索引 注意:当nums数组只有一个元素的时候,这个元素就是顶元素 因为根据题目:nums[-1] = nums[n] = -∞ 方法一: class Solution { public int findPeakElement(int[] num
3
0
0
[LeetCode] LeetCode852. 山脉数组的顶峰索引
摘要:题目描述 思路:用二分进行排除不满足条件的元素,最后剩下的元素即为答案 往常我们使用「二分」进行查值,需要确保序列本身满足「二段性」:当选定一个端点(基准值)后,结合「一段满足 & 另一段不满足」的特性来实现“折半”的查找效果。 但本题求的是峰顶索引值,如果我们选定数组头部或者尾部元素,其实无法根据
4
0
0
[LeetCode Hot 100] LeetCode74. 搜索二维矩阵
摘要:题目描述 思路:二维矩阵坐标变换 + 二分查找 二维矩阵坐标变换: 只要知道二维数组的的行数m和列数n,二维数组的坐标 (i, j) 可以映射成一维的index = i * n + j;反过来也可以通过一维index反解出二维坐标 i = index / n,j = index % n。(n是列数)
4
0
0
[LeetCode Hot 100] LeetCode153. 寻找旋转排序数组中的最小值
摘要:题目描述 思路 如果数组翻转后又回到升序的情况,即nums[left] <= nums[right],则nums[left]就是最小值,直接返回。 如果数组翻转,需要找到数组中第二部分的第一个元素: 若 nums[left] <= nums[mid],说明区间 [left,mid] 连续递增,则最小
3
0
0
[LeetCode] LeetCode81. 搜索旋转排序数组II
摘要:题目描述 思路:是lc33.搜索旋转排序数组的延伸,允许包含重复元素 起初: 当nums[left] <= nums[mid]时,区间[left,mid]有序 当nums[left] > nums[mid]时,区间[mid ,right]有序 但是这个题目当nums[left] == nums[mi
2
0
0
[LeetCode Hot 100] LeetCode35. 搜索插入位置
摘要:题目描述 思路 基础二分搜索模板 本质:找到第一个大于等于target的元素的下标 注意: 该题目不存在重复元素 存在一种特殊情况:target > nums的最大值,此时插入的位置正好是left的位置 方法一: class Solution { public int searchInsert(in
7
0
0
[LeetCode Hot 100] LeetCode34.在排序数组中查找元素的第一个和最后一个位置
摘要:题目描述 思路: 二分查找之寻找左右侧边界 两个关键点:1. 数组有序;2. 时间复杂度O(log n) 方法一: class Solution { public int[] searchRange(int[] nums, int target) { if (nums.length == 0 ||
2
0
0
[LeetCode Hot 100] LeetCode33. 搜索旋转排序数组
摘要:题目描述 思路 如果nums[left] <= nums[mid],则[left, mid]有序 如果nums[left] > nums[mid],则[mid,right]有序 方法一: class Solution { public int search(int[] nums, int targe
3
0
0
[LeetCode] LeetCode704. 二分查找
摘要:题目描述 思路 基础二分查找模板的考察。 方法一: class Solution { public int search(int[] nums, int target) { if (nums == null || nums.length == 0) return -1; int left = 0,
12
0
0
[刷题技巧] 堆的相关知识点汇总
摘要:1. 堆 一、堆的引入 现在我们想专门设计一种数据结构,用来存放整数,要求提供3个接口: 添加元素 获取最大值(或最小值) 删除最大值(或最小值) 有一种最优的数据结构就是堆。 时间复杂度:获取最大值的:O(1)、删除最大值O(log n)、添加元素O(log n) 二、堆的相关概念 堆(Heap是
17
0
0
[LeetCode] LeetCode373. 查找和最小的K对数字
摘要:题目描述 思路:大顶堆+翻转 注意:该题有问题,代码可以通过测试用例。 方法一: class Solution { public List<List<Integer>> kSmallestPairs(int[] nums1, int[] nums2, int k) { PriorityQueue<N
9
0
0
[LeetCode] LeetCode692. 前K个高频单词
摘要:题目描述 思路 注意是前K个高频单词,就是TopK问题,只能用小根堆找最大的K个元素啊,用大根堆找的就是最小的K个元素了 思路一: class Solution { public List<String> topKFrequent(String[] words, int k) { Map<Strin
1
0
0
[LeetCode] LeetCode378. 有序矩阵中第K小的元素
摘要:题目描述 思路:Top-K问题 + 大顶堆 使用大顶堆求第K小的元素。 方法一: class Solution { public int kthSmallest(int[][] matrix, int k) { // 1. 使用大顶堆 PriorityQueue<Integer> heap = ne
6
0
0
[LeetCode] LeetCode451. 根据字符出现频率排序
摘要:题目描述 思路:使用大顶堆 方法一: class Solution { public String frequencySort(String s) { // 1. HashMap统计词频 Map<Character, Integer> map = new HashMap<>(); for (char
7
0
0
[LeetCode] LeeCode703. 数据流中的第K大元素
摘要:题目描述 思路:最小堆 好好领悟这个代码: // 将nums数组所有元素插入小根堆中 for (int num : nums) { heap.offer(num); // 当小根堆的容量大于k时,就删除堆顶元素 if (heap.size() > k) heap.poll(); } 当heap.si
6
0
0
[刷题技巧] 链表刷题技巧汇总
摘要:链表的算法题中很常见的技巧: 添加虚拟头结点,即dummy结点。当需要创造一条新链表的时候,可以使用虚拟头节点简化边界情况的处理。 例如:LeetCode21. 合并两个有序链表,让两条有序链表合并成一条新的有序链表,需要创造一条新的链表。 例如,LeetCode86. 分隔链表,把一条链表分解成两
5
0
0
[LeetCode] LeetCode92. 反转链表II
摘要:题目描述 思路:同LeetCode25. K个一组翻转链表 因为涉及到可能链表的头节点会改变,所以设置dummy节点 先走left - 1步到达left的左边一个节点 查看后面是否存在right - left + 1个节点 先翻转内部节点指向right - left次 再翻转外部节点 方法一: /*
4
0
0
[LeetCode Hot 100] LeetCode25. K个一组翻转链表
摘要:题目描述 思路: 判断链表中是否足够k个元素 再将这k个元素内部翻转一下 将前后端点连接的指针变化一下 方法一: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next
4
0
0
[LeetCode Hot 100] LeetCode138. 随机链表的复制
摘要:题目描述 思路一:添加"小弟" 根据遍历到的原节点创建对应的新节点,每个新创建的节点是在原节点后面。 原节点i的随机指针(如果有的话),指向的是原节点j,那么新节点i的随机指针,指向的是原节点j的next 最后将两个链表分开,再返回新链表就可以 思路二:使用哈希表 首先创建一个哈希表,再遍历原链表,
10
0
0
[LeetCode Hot 100] LeetCode148. 排序链表
摘要:题目描述 思路一:堆排序、小顶堆 定义一个最小堆 将链表的所有节点放入一个最小堆中 直接用队列弹出的最小值依次覆盖掉原链表的值 方法一: /** * Definition for singly-linked list. * public class ListNode { * int val; * L
5
0
0
[LeetCode Hot 100] LeetCode24. 两两交换链表中的节点
摘要:题目描述 思路: 创建dummy节点,令dummy.next = head。令cur表示当前到达的节点,初始时cur = dummy。每次需要交换cur后面的两个节点。 如果cur的后面没有节点或者只有一个节点,则没有更多的节点需要交换,因此结束交换。否则,获得cur后面的两个节点node1和nod
2
0
0
[LeetCode Hot 100] LeetCode155. 最小栈
摘要:题目描述 思路一:使用辅助栈 定义一个[数据栈]来支持push、pop、top操作 定义一个[辅助栈],其栈顶为当前的最小值,以支持常数时间复杂度的getMin操作 思路二:使用ArrayDeque 栈元素中除了保存当前值之外,额外保存当前最小值 使用静态内部类 方法一:对应思路一 class Mi
4
0
0
[LeetCode Hot 100] LeetCode20. 有效的括号
摘要:题目描述 思路: 栈的经典应用。 注意下遇到右括号的代码,即边界情况: // 遇到右括号,则进行括号匹配 if (!stack.isEmpty() && stack.peek() == match(c)) { // 如果匹配则直接弹出栈顶元素 stack.pop(); } else { // 如果不
2
0
0
[LeetCode Hot 100] LeetCode295. 数据流的中位数
摘要:题目描述 思路:一个大根堆+一个小根堆+保持数量 一个大根堆用来记录数轴左边的数值 一个小根堆用来记录数轴右边的数值 大根堆的容量要么等于小根堆的容量(此时是偶数个有序整数列表),要么大根堆的容量比小根堆的容量大1(此时是奇数个有序整数列表) 如果数量不符合上述条件,则将超过容量的那个堆的堆顶元素插
4
0
0
[LeetCode Hot 100] LeetCode215. 数组中的第K个最大元素
摘要:题目描述 思路:小顶堆 维护一个大小为K的小顶堆 遍历所有元素: 如果当前堆中元素个数小于K,则将元素添加到堆中 如果当前堆中元素个数等于K,则判断第K + 1 方法一: class Solution { public int findKthLargest(int[] nums, int k) {
3
0
0
[LeetCode Hot 100] LeetCode347. 前K个高频元素
摘要:题目描述 思路:小顶堆 首先遍历整个数组,并是用哈希表记录每个数字出现的次数,并形成一个"出现次数数组"。 找出原数组的前k个高频元素,就相当于找出"出现次数数组"的前K大的值。 建立一个小顶堆,然后遍历"出现次数数组" 如果堆的元素个数小于k,就可以直接插入堆中。 如果堆的元素个数等于k,则检查堆
3
0
0
[LeetCode Hot 100] LeetCode2. 两数相加
摘要:题目描述 思路:模拟 每次3个数相加:l1链表的值 + l2链表的值 + 进位 如果 l1链表不为空 或者 l2链表不为空 或者 进位不为0 我们就执行循环 那么和存储的是 t % 10 进位就是t / 10 因为题目需要创造一条链表,所以我们创建一个dummy结点的话会方便一点。 方法一: /**
3
0
0
LeetCode876. 链表的中间结点
摘要:题目描述 思路:快慢指针 快指针一次走两步 慢指针一次走一步 当快指针到达末尾的时候,慢指针所指的就是链表的中点 方法一: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode
1
0
0
[LeetCode Hot 100] LeetCode23. 合并K个升序链表
摘要:题目描述 思路:优先队列 使用优先队列这个数据结构,对于这个数据结构,我们不用去管内部是如何实现的,我们只要知道有这么一种数据结构能帮助我们将一堆数据塞到优先队列这一个黑盒中,然后我们可以获取这堆数中最小的值或者最大的值。 代码一: /** * Definition for singly-linke
2
0
0
[LeetCode Hot 100] LeetCode86. 分隔链表
摘要:题目描述 思路 可以将链表分成两个小链表,一个链表中的元素大小都小于x,另一个链表中的元素都大于等于x,然后再把这两条链表连接到一起,就得到题目想要的结果。 这个题类似于合并两个有序链表:只不过另一个链表只有唯一一个节点x。 合并这两个链表。 方法一: /** * Definition for si
5
0
0
第14章. 堆
摘要:一、堆的引入 现在我们想专门设计一种数据结构,用来存放整数,要求提供3个接口: 添加元素 获取最大值(或最小值) 删除最大值(或最小值) 有一种最优的数据结构就是堆。 时间复杂度:获取最大值的:O(1)、删除最大值O(log n)、添加元素O(log n) 二、堆的相关概念 堆(Heap是一种树状的
3
0
0
第13章. 哈希表
摘要:哈希表(Hash Table) 一、引言 TreeMap分析 添加、删除、搜索的时间复杂度:O(n) 特点: key必须具备可比较性 元素的分布是有顺序的 但是在实际应用中,很多时候的需求中 Map中存储的元素不需要讲究顺序 Map中的Key不需要具备可比较性 不考虑顺序、不考虑Key的可比较性,M
11
0
0
第12章. 映射(Map)
摘要:映射(Map) Map在有些变成语言中也叫作字典(比如在Python中) Map的每一个Key是唯一的,Value可以不是唯一的 Map中的每一个Key对应一个Value 一、Map的接口设计 public interface Map<K, V> { int size; boolean isEmpt
7
0
0
第11章. 集合(Set)
摘要:集合(Set) 一、集合的特点 集合的特点: 不存放重复的元素 常用于去重 二、集合的实现方式 思考:集合的内部实现是否能直接利用以前学过的数据结构? 动态数组 链表 二叉搜索树(AVL树、红黑树) 三、集合的接口实现 public interface Set<E> { int size(); bo
13
0
0
第10章. 红黑树
摘要:红黑树(Red Black Tree) 红黑树性质 null节点只是一种记号,并不存储真实数据,也不是红黑树中的实际节点,其作用是方便程序员在设计和编程时理解节点的操作规则,在实际应用中并没有实际意义。 红黑树的等价变换 红黑树和4阶B树(2-3-4树)具有等价性 红黑树是平衡二叉搜索树,而B树是平
6
0
0
第9章. B树
摘要:B树(B-tree、B-树) B树是一种平衡的多路搜索树,多用于文件系统,数据库的实现。 B树的特点 1个节点可以存储超过2个元素、可以拥有超过2个子节点 拥有平衡二叉搜索树的一些性质 平衡、每个节点的所有子树高度一致 比较矮 m阶B树的性质(m>=2) m阶B树一个节点最多拥有m-1个元素,最多有
9
0
0
第8章. AVL树
摘要:AVL树 AVL树是在二叉搜索树上加上自平衡的功能。 AVL树是最早发明的自平衡二叉搜索树之一。 AVL取名于两位发明者的名字:G.M.Aelson-Velsky和E.M.Landis。 1.1 平衡因子 平衡因子(Balance Factor):某节点的左右子树高度差 平衡因子 = 左子树高度 -
7
0
0
第7章. 平衡二叉搜索树
摘要:平衡二叉搜索树(Balanced Binary Search Tree) 1.1 二叉搜索树存在的问题 添加、删除节点时,都可能导致二叉搜索树退化成链表。为了防止二叉搜索树退化成链表,让添加、删除搜索的复杂度维持在O(logn),提出平衡的概念。 1.2 平衡(Balance) 平衡:当节点数量固定
19
0
0
第6章. 二叉搜索树(BST)
摘要:二叉搜索树(Binary Search Tree) 使用二叉搜索树,可以使添加、删除、搜索的最坏时间复杂度优化至O(logn) 一、BST的相关概念 二叉搜索树是二叉树的一种,又被称为二叉查找树、二叉排序树,是应用非常广泛的一种二叉树,简称BST。 任意一个节点的值都大于其左子树所有节点的值 任意一
16
0
0
第5章. 二叉树
摘要:二叉树 一、树的基本概念 节点、根节点、父节点、子节点、兄弟节点 一棵树可以没有任何节点,称为空树 一棵树可以只有一个节点,也就是只有根节点 子树、左子树、右子树 节点的度:子树的个数 树的度:所有节点度中的最大值 叶子节点:度为0的节点 非叶子节点:度不为0的节点 层数:根节点在第1层,根节点的子
10
0
0
第4章. 队列(Queue)
摘要:队列(Queue) 一、队列的基本概念 队列是一种特殊的线性表,只能在头尾两端进行操作 队尾(rear):只能从队尾添加元素,一般叫做enQueue,入队 队头(front):只能从队头移除元素,一般叫做deQueue,出队 先进先出的原则,FIRST IN FIRST OUT,FIFO 二、队列的
21
0
0
第3章. 栈(Stack)
摘要:栈(Stack) 一、栈的相关概念 栈是一种特殊的线性表,只能在一端进行操作 往栈中添加元素的操作,一般叫做push,入栈。 往栈中移除元素的操作,一般叫做pop,出栈(只能移除栈顶元素,也叫作:弹栈) 先进后出的原则:Last IN FIRST OUT,LIFO。 二、栈的接口设计 int siz
5
0
0
第2章. 链表(LinkedList)
摘要:链表 链表是一种链式存储的线性表,所有元素的内存地址不一定是连续的。 单向链表 一、单向链表的设计 1.1、不带虚拟头结点 public class LinkedList<E> { // 链表的节点数量 private int size; // 链表的头结点 private Node<E> firs
14
0
0
第1章. 动态数组(ArrayList)
摘要:动态数组 一、动态数组接口设计 // 这里可以写一个List接口,然后ArrayList类去实现这个接口,实现接口中的方法。但为了方便起见,直接将这些方法写在类中。 // 这些方法暂时不添加泛型、和正确的返回值 public class ArrayList { // 动态数组的长度 private
31
0
0
第0章. 时空复杂度
摘要:时空复杂度 一、时间复杂度 时间复杂度:估算程序指令的执行次数(执行时间) 1.1 大O表示法(Big O) 一般用大O表示法来描述复杂度,它表示的是数据规模n对应的复杂度 它并不是用于来真实代表算法的执行时间,它是用来表示代码执行时间的增长变化趋势的 忽略常数、系数、低阶 9 —— O(1) 2
13
0
0
[LeetCode Hot 100] LeetCode73. 矩阵置零
摘要:题目描述 思路一:开辟两个数组,时间复杂度O(m + n) 开辟两个数组用来记录哪些行、哪些列需要置为零。 这样时间复杂度为O(m + n)。 思路二: 原地算法:不适用额外空间或者说常数级空间来实现算法。 类似于使用set保存每行每列是否需要置零, 方法一:对应思路一 class Solution
4
0
0
[LeetCode Hot 100] LeetCode19. 删除链表的倒数第N个结点
摘要:题目描述 思路一:采用两次遍历 第一遍遍历先获取链表的长度length 第二次从dummy节点开始走length - n步 然后将该节点指向下下个节点 思路二:采用一次遍历 设置虚拟节点dummyHead指向head 设定双指针p和q,初始都指向虚拟节点dummyHead 移动q,直到p与q之间相隔
2
0
0
[LeetCode Hot 100] LeetCode21. 合并两个有序链表
摘要:题目描述 思路:新建dummy去"穿针引线" 新建一个dummy节点去"穿针引线" 注意最后返回的是dummy.next 方法一: /** * Definition for singly-linked list. * public class ListNode { * int val; * List
2
0
0
[LeetCode Hot 100] LeetCode141. 环形链表
摘要:题目描述 思路:快慢指针 slow指针:每次移动一个节点 fast指针:每次移动两个节点 如果链表中存在环,fast指针最终会在某一时刻追上slow指针,这是由于移动速度快的fast指针会在某个时刻绕圈并追上速度慢的slow指针 条件 fast != null && fast.next != nul
1
0
0
[LeetCode Hot 100] LeetCode49. 字母异位词
摘要:题目描述 思路:哈希表 对字符串排序,如果是异位词,排序后就变成一样的了。 方法一: class Solution { public List<List<String>> groupAnagrams(String[] strs) { Map<String, List<String>> map = n
3
0
0
[LeetCode Hot 100] LeetCode206. 反转链表
摘要:题目描述 思路:双指针算法 方法一: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val)
3
0
0
[LeetCode Hot 100] LeetCode234. 回文链表
摘要:题目描述 思路1:将值复制到数组中然后使用双指针 计算链表的长度 创建等长的数组 将链表中的数依次放入数组中 使用左右指针判断链表是否是回文链表 时间复杂度:O(n) 空间复杂度:O(n) 思路2:快慢指针+反转链表 用快慢指针,快指针走两步,慢指针走一步,快指针遇到终止位置时,慢指针就在链表中间位
4
0
0
[LeetCode Hot 100] LeetCode3. 无重复字符的最长子串
摘要:题目描述 思路:滑动窗口 定义需要维护的变量 // 1. 定义需要维护的变量 int max_len = 0; Map<Character, Integer> hashmap = new HashMap<>(); 窗口不满足条件,窗口收缩。窗口不是固定大小所以用while // 4. 窗口不满足条件
3
0
0
LeetCode567. 字符串的排列
摘要:题目描述 思路:滑动窗口模板 定义需要维护的变量 Map<Character, Integer> map = new HashMap<>(); Map<Character, Integer> map_s1 = new HashMap<>(); for (char c : s1.toCharArray
2
0
0
LeetCode643. 子数组最大平均数I
摘要:题目描述 思路:滑动窗口模板 定义需要维护的变量 // 1. 定义需要维护的变量 double sum = 0; double max_avg = Integer.MIN_VALUE; 窗口固定大小为k,所以用if if (end - start + 1 == k) { sum -= nums[st
2
0
0
[LeetCode Hot 100] LeetCode438. 找到字符串中所有字母异位词
摘要:题目描述 思路:滑动窗口模板 需要维护的变量: // 1. 用于存放结果 List<Integer> res = new ArrayList<>(); // 2. 定义需要维护的变量:根据题意可知是一个哈希表 Map<Character, Integer> map = new HashMap<>()
3
0
0
[LeetCode Hot 100] LeetCode1. 两数之和
摘要:题目描述 思路: 如果哈希表存在target-nums[i],则返回索引下标i和对应的key值(可以按任意顺序返回答案) 如果哈希表中不存在target-nums[i],则存入nums[i]和对应的索引值 方法一:哈希表 class Solution { public int[] twoSum(in
2
0
0
[LeetCode Hot 100] LeetCode160. 相交链表
摘要:题目描述 思路 方法一: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = nu
4
0
0
[LeetCode Hot 100] LeetCode15. 三数之和
摘要:题目描述 思路 特判:对于数组长度为n,如果数组为null或者数组长度小于3,返回[]。 对数组进行排序。 遍历排序后的数组: 若 nums[i]>0nums[i]>0nums[i]>0:因为已经排序好,所以后面不可能有三个数加和等于 000,直接返回结果。 对于重复元素:跳过,避免出现重复解。 令
2
0
0
[LeetCode Hot 100] LeetCode11. 盛最多的水
摘要:题目描述 方法一:暴力,超出时间限制 模拟所有情况,记录最大的体积值。 体积 = Math.min(height[i], height[j]) * (j - i) class Solution { public int maxArea(int[] height) { int res = Intege
5
0
0
[LeetCode Hot] LeetCode283. 移动零
摘要:题目描述 方法一:时间复杂度O(n2) class Solution { public void moveZeroes(int[] nums) { for (int i = 0; i < nums.length; i ++) { // 指针i为0的时候停止 if (nums[i] == 0) { /
4
0
0
[LeetCode Hot 100] LeetCode128. 最长连续序列
摘要:题目描述 思路 将数组所有点映射到一个数轴上,可以发现问题变为求每段区间首元素到尾元素的长度的最大值。 区间的长度:区间尾元素值-区间首元素值 + 1 方法一:超出时间限制 这个方法是最初自己想到的,但是超时了,主要原因是程序会有冗余的遍历过程,增加了开销。 思路:(时间复杂度太高) 先把所有元素加
12
0
0
【AcWing-Linux】03. Shell
摘要:Shell 一、Shell简介 shell是我们通过命令行与操作系统沟通的语言。 shell是一种脚本语言,通过对应的脚本解释器解释执行,一般作为内置于操作系统的应用程序向用户提供访问操作系统内核的服务。 shell脚本(shell script)可以直接在命令行中执行,也可以将一套逻辑组织成一个文
17
0
0
深色
回顶
收起
点击右上角即可分享
微信分享提示
  1. 1 You Are My Sunshine REOL
You Are My Sunshine - REOL
00:00 / 00:00
An audio error has occurred.

作曲 : Traditional

You are my sunshine

My only sunshine.

You make me happy

When skies are gray.

You'll never know, dear,

How much I love you.

Please don't take my sunshine away

The other night, dear,

When I lay sleeping

I dreamed I held you in my arms.

When I awoke, dear,

I was mistaken

So I hung my head and cried.

You are my sunshine,

My only sunshine.

You make me happy

When skies are gray.

You'll never know, dear,

How much I love you.

Please don't take my sunshine away.

You are my sunshine,

My only sunshine

You make me happy

When skies are gray.

You'll never know, dear

How much I love you

Please don't take my sunshine away

Please don't take my sunshine away.

Please don't take my sunshine away.