auto commit
This commit is contained in:
parent
1dd4d45e0a
commit
cb20aadfef
@ -1,23 +1,14 @@
|
||||
<!-- GFM-TOC -->
|
||||
* [原理](#原理)
|
||||
* [1. 正常实现](#1-正常实现)
|
||||
* [2. 时间复杂度](#2-时间复杂度)
|
||||
* [3. m 计算](#3-m-计算)
|
||||
* [4. 未成功查找的返回值](#4-未成功查找的返回值)
|
||||
* [5. 变种](#5-变种)
|
||||
* [例题](#例题)
|
||||
* [1. 求开方](#1-求开方)
|
||||
* [2. 大于给定元素的最小元素](#2-大于给定元素的最小元素)
|
||||
* [3. 有序数组的 Single Element](#3-有序数组的-single-element)
|
||||
* [4. 第一个错误的版本](#4-第一个错误的版本)
|
||||
* [5. 旋转数组的最小数字](#5-旋转数组的最小数字)
|
||||
* [6. 查找区间](#6-查找区间)
|
||||
* [1. 求开方](#1-求开方)
|
||||
* [2. 大于给定元素的最小元素](#2-大于给定元素的最小元素)
|
||||
* [3. 有序数组的 Single Element](#3-有序数组的-single-element)
|
||||
* [4. 第一个错误的版本](#4-第一个错误的版本)
|
||||
* [5. 旋转数组的最小数字](#5-旋转数组的最小数字)
|
||||
* [6. 查找区间](#6-查找区间)
|
||||
<!-- GFM-TOC -->
|
||||
|
||||
|
||||
# 原理
|
||||
|
||||
## 1. 正常实现
|
||||
**正常实现**
|
||||
|
||||
```text
|
||||
Input : [1,2,3,4,5]
|
||||
@ -42,11 +33,11 @@ public int binarySearch(int[] nums, int key) {
|
||||
}
|
||||
```
|
||||
|
||||
## 2. 时间复杂度
|
||||
**时间复杂度**
|
||||
|
||||
二分查找也称为折半查找,每次都能将查找区间减半,这种折半特性的算法时间复杂度为 O(logN)。
|
||||
|
||||
## 3. m 计算
|
||||
**m 计算**
|
||||
|
||||
有两种计算中值 m 的方式:
|
||||
|
||||
@ -55,14 +46,14 @@ public int binarySearch(int[] nums, int key) {
|
||||
|
||||
l + h 可能出现加法溢出,也就是说加法的结果大于整型能够表示的范围。但是 l 和 h 都为正数,因此 h - l 不会出现加法溢出问题。所以,最好使用第二种计算法方法。
|
||||
|
||||
## 4. 未成功查找的返回值
|
||||
**未成功查找的返回值**
|
||||
|
||||
循环退出时如果仍然没有查找到 key,那么表示查找失败。可以有两种返回值:
|
||||
|
||||
- -1:以一个错误码表示没有查找到 key
|
||||
- l:将 key 插入到 nums 中的正确位置
|
||||
|
||||
## 5. 变种
|
||||
**变种**
|
||||
|
||||
二分查找可以有很多变种,变种实现要注意边界值的判断。例如在一个有重复元素的数组中查找 key 的最左位置的实现如下:
|
||||
|
||||
@ -103,9 +94,7 @@ l m h
|
||||
|
||||
当循环体退出时,不表示没有查找到 key,因此最后返回的结果不应该为 -1。为了验证有没有查找到,需要在调用端判断一下返回位置上的值和 key 是否相等。
|
||||
|
||||
# 例题
|
||||
|
||||
## 1. 求开方
|
||||
# 1. 求开方
|
||||
|
||||
[69. Sqrt(x) (Easy)](https://leetcode.com/problems/sqrtx/description/)
|
||||
|
||||
@ -143,7 +132,7 @@ public int mySqrt(int x) {
|
||||
}
|
||||
```
|
||||
|
||||
## 2. 大于给定元素的最小元素
|
||||
# 2. 大于给定元素的最小元素
|
||||
|
||||
[744. Find Smallest Letter Greater Than Target (Easy)](https://leetcode.com/problems/find-smallest-letter-greater-than-target/description/)
|
||||
|
||||
@ -177,7 +166,7 @@ public char nextGreatestLetter(char[] letters, char target) {
|
||||
}
|
||||
```
|
||||
|
||||
## 3. 有序数组的 Single Element
|
||||
# 3. 有序数组的 Single Element
|
||||
|
||||
[540. Single Element in a Sorted Array (Medium)](https://leetcode.com/problems/single-element-in-a-sorted-array/description/)
|
||||
|
||||
@ -214,7 +203,7 @@ public int singleNonDuplicate(int[] nums) {
|
||||
}
|
||||
```
|
||||
|
||||
## 4. 第一个错误的版本
|
||||
# 4. 第一个错误的版本
|
||||
|
||||
[278. First Bad Version (Easy)](https://leetcode.com/problems/first-bad-version/description/)
|
||||
|
||||
@ -239,7 +228,7 @@ public int firstBadVersion(int n) {
|
||||
}
|
||||
```
|
||||
|
||||
## 5. 旋转数组的最小数字
|
||||
# 5. 旋转数组的最小数字
|
||||
|
||||
[153. Find Minimum in Rotated Sorted Array (Medium)](https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/description/)
|
||||
|
||||
@ -263,7 +252,7 @@ public int findMin(int[] nums) {
|
||||
}
|
||||
```
|
||||
|
||||
## 6. 查找区间
|
||||
# 6. 查找区间
|
||||
|
||||
[34. Find First and Last Position of Element in Sorted Array](https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/)
|
||||
|
||||
|
@ -1,28 +1,21 @@
|
||||
<!-- GFM-TOC -->
|
||||
* [原理](#原理)
|
||||
* [1. 基本原理](#1-基本原理)
|
||||
* [2. mask 计算](#2-mask-计算)
|
||||
* [3. Java 中的位操作](#3-java-中的位操作)
|
||||
* [例题](#例题)
|
||||
* [统计两个数的二进制表示有多少位不同](#统计两个数的二进制表示有多少位不同)
|
||||
* [数组中唯一一个不重复的元素](#数组中唯一一个不重复的元素)
|
||||
* [找出数组中缺失的那个数](#找出数组中缺失的那个数)
|
||||
* [数组中不重复的两个元素](#数组中不重复的两个元素)
|
||||
* [翻转一个数的比特位](#翻转一个数的比特位)
|
||||
* [不用额外变量交换两个整数](#不用额外变量交换两个整数)
|
||||
* [判断一个数是不是 2 的 n 次方](#判断一个数是不是-2-的-n-次方)
|
||||
* [判断一个数是不是 4 的 n 次方](#判断一个数是不是-4-的-n-次方)
|
||||
* [判断一个数的位级表示是否不会出现连续的 0 和 1](#判断一个数的位级表示是否不会出现连续的-0-和-1)
|
||||
* [求一个数的补码](#求一个数的补码)
|
||||
* [实现整数的加法](#实现整数的加法)
|
||||
* [字符串数组最大乘积](#字符串数组最大乘积)
|
||||
* [统计从 0 \~ n 每个数的二进制表示中 1 的个数](#统计从-0-\~-n-每个数的二进制表示中-1-的个数)
|
||||
* [1. 统计两个数的二进制表示有多少位不同](#1-统计两个数的二进制表示有多少位不同)
|
||||
* [2. 数组中唯一一个不重复的元素](#2-数组中唯一一个不重复的元素)
|
||||
* [3. 找出数组中缺失的那个数](#3-找出数组中缺失的那个数)
|
||||
* [4. 数组中不重复的两个元素](#4-数组中不重复的两个元素)
|
||||
* [5. 翻转一个数的比特位](#5-翻转一个数的比特位)
|
||||
* [6. 不用额外变量交换两个整数](#6-不用额外变量交换两个整数)
|
||||
* [7. 判断一个数是不是 2 的 n 次方](#7-判断一个数是不是-2-的-n-次方)
|
||||
* [8. 判断一个数是不是 4 的 n 次方](#8--判断一个数是不是-4-的-n-次方)
|
||||
* [9. 判断一个数的位级表示是否不会出现连续的 0 和 1](#9-判断一个数的位级表示是否不会出现连续的-0-和-1)
|
||||
* [10. 求一个数的补码](#10-求一个数的补码)
|
||||
* [11. 实现整数的加法](#11-实现整数的加法)
|
||||
* [12. 字符串数组最大乘积](#12-字符串数组最大乘积)
|
||||
* [13. 统计从 0 \~ n 每个数的二进制表示中 1 的个数](#13-统计从-0-\~-n-每个数的二进制表示中-1-的个数)
|
||||
<!-- GFM-TOC -->
|
||||
|
||||
|
||||
# 原理
|
||||
|
||||
## 1. 基本原理
|
||||
**基本原理**
|
||||
|
||||
0s 表示一串 0,1s 表示一串 1。
|
||||
|
||||
@ -48,7 +41,7 @@ x ^ x = 0 x & x = x x | x = x
|
||||
- \>\>\> n 为无符号右移,左边会补上 0。
|
||||
- << n 为算术左移,相当于乘以 2<sup>n</sup>。
|
||||
|
||||
## 2. mask 计算
|
||||
** mask 计算**
|
||||
|
||||
要获取 111111111,将 0 取反即可,\~0。
|
||||
|
||||
@ -58,7 +51,7 @@ x ^ x = 0 x & x = x x | x = x
|
||||
|
||||
要得到 1 到 i 位为 0 的 mask,只需将 1 到 i 位为 1 的 mask 取反,即 \~(1<<(i+1)-1)。
|
||||
|
||||
## 3. Java 中的位操作
|
||||
**Java 中的位操作**
|
||||
|
||||
```html
|
||||
static int Integer.bitCount(); // 统计 1 的数量
|
||||
@ -66,9 +59,7 @@ static int Integer.highestOneBit(); // 获得最高位
|
||||
static String toBinaryString(int i); // 转换为二进制表示的字符串
|
||||
```
|
||||
|
||||
# 例题
|
||||
|
||||
## 统计两个数的二进制表示有多少位不同
|
||||
# 1. 统计两个数的二进制表示有多少位不同
|
||||
|
||||
[461. Hamming Distance (Easy)](https://leetcode.com/problems/hamming-distance/)
|
||||
|
||||
@ -121,7 +112,7 @@ public int hammingDistance(int x, int y) {
|
||||
}
|
||||
```
|
||||
|
||||
## 数组中唯一一个不重复的元素
|
||||
# 2. 数组中唯一一个不重复的元素
|
||||
|
||||
[136. Single Number (Easy)](https://leetcode.com/problems/single-number/description/)
|
||||
|
||||
@ -140,7 +131,7 @@ public int singleNumber(int[] nums) {
|
||||
}
|
||||
```
|
||||
|
||||
## 找出数组中缺失的那个数
|
||||
# 3. 找出数组中缺失的那个数
|
||||
|
||||
[268. Missing Number (Easy)](https://leetcode.com/problems/missing-number/description/)
|
||||
|
||||
@ -161,7 +152,7 @@ public int missingNumber(int[] nums) {
|
||||
}
|
||||
```
|
||||
|
||||
## 数组中不重复的两个元素
|
||||
# 4. 数组中不重复的两个元素
|
||||
|
||||
[260. Single Number III (Medium)](https://leetcode.com/problems/single-number-iii/description/)
|
||||
|
||||
@ -185,7 +176,7 @@ public int[] singleNumber(int[] nums) {
|
||||
}
|
||||
```
|
||||
|
||||
## 翻转一个数的比特位
|
||||
# 5. 翻转一个数的比特位
|
||||
|
||||
[190. Reverse Bits (Easy)](https://leetcode.com/problems/reverse-bits/description/)
|
||||
|
||||
@ -230,7 +221,7 @@ private int reverseByte(byte b) {
|
||||
}
|
||||
```
|
||||
|
||||
## 不用额外变量交换两个整数
|
||||
# 6. 不用额外变量交换两个整数
|
||||
|
||||
[程序员代码面试指南 :P317](#)
|
||||
|
||||
@ -240,7 +231,7 @@ b = a ^ b;
|
||||
a = a ^ b;
|
||||
```
|
||||
|
||||
## 判断一个数是不是 2 的 n 次方
|
||||
# 7. 判断一个数是不是 2 的 n 次方
|
||||
|
||||
[231. Power of Two (Easy)](https://leetcode.com/problems/power-of-two/description/)
|
||||
|
||||
@ -260,7 +251,7 @@ public boolean isPowerOfTwo(int n) {
|
||||
}
|
||||
```
|
||||
|
||||
## 判断一个数是不是 4 的 n 次方
|
||||
# 8. 判断一个数是不是 4 的 n 次方
|
||||
|
||||
[342. Power of Four (Easy)](https://leetcode.com/problems/power-of-four/)
|
||||
|
||||
@ -280,7 +271,7 @@ public boolean isPowerOfFour(int num) {
|
||||
}
|
||||
```
|
||||
|
||||
## 判断一个数的位级表示是否不会出现连续的 0 和 1
|
||||
# 9. 判断一个数的位级表示是否不会出现连续的 0 和 1
|
||||
|
||||
[693. Binary Number with Alternating Bits (Easy)](https://leetcode.com/problems/binary-number-with-alternating-bits/description/)
|
||||
|
||||
@ -305,7 +296,7 @@ public boolean hasAlternatingBits(int n) {
|
||||
}
|
||||
```
|
||||
|
||||
## 求一个数的补码
|
||||
# 10. 求一个数的补码
|
||||
|
||||
[476. Number Complement (Easy)](https://leetcode.com/problems/number-complement/description/)
|
||||
|
||||
@ -360,7 +351,7 @@ public int findComplement(int num) {
|
||||
}
|
||||
```
|
||||
|
||||
## 实现整数的加法
|
||||
# 11. 实现整数的加法
|
||||
|
||||
[371. Sum of Two Integers (Easy)](https://leetcode.com/problems/sum-of-two-integers/description/)
|
||||
|
||||
@ -374,7 +365,7 @@ public int getSum(int a, int b) {
|
||||
}
|
||||
```
|
||||
|
||||
## 字符串数组最大乘积
|
||||
# 12. 字符串数组最大乘积
|
||||
|
||||
[318. Maximum Product of Word Lengths (Medium)](https://leetcode.com/problems/maximum-product-of-word-lengths/description/)
|
||||
|
||||
@ -409,7 +400,7 @@ public int maxProduct(String[] words) {
|
||||
}
|
||||
```
|
||||
|
||||
## 统计从 0 \~ n 每个数的二进制表示中 1 的个数
|
||||
# 13. 统计从 0 \~ n 每个数的二进制表示中 1 的个数
|
||||
|
||||
[338. Counting Bits (Medium)](https://leetcode.com/problems/counting-bits/description/)
|
||||
|
||||
|
@ -1,11 +1,11 @@
|
||||
<!-- GFM-TOC -->
|
||||
* [二分图](#二分图)
|
||||
* [判断是否为二分图](#判断是否为二分图)
|
||||
* [1. 判断是否为二分图](#1-判断是否为二分图)
|
||||
* [拓扑排序](#拓扑排序)
|
||||
* [课程安排的合法性](#课程安排的合法性)
|
||||
* [课程安排的顺序](#课程安排的顺序)
|
||||
* [1. 课程安排的合法性](#1-课程安排的合法性)
|
||||
* [2. 课程安排的顺序](#2-课程安排的顺序)
|
||||
* [并查集](#并查集)
|
||||
* [冗余连接](#冗余连接)
|
||||
* [1. 冗余连接](#1-冗余连接)
|
||||
<!-- GFM-TOC -->
|
||||
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
|
||||
如果可以用两种颜色对图中的节点进行着色,并且保证相邻的节点颜色不同,那么这个图就是二分图。
|
||||
|
||||
## 判断是否为二分图
|
||||
## 1. 判断是否为二分图
|
||||
|
||||
[785. Is Graph Bipartite? (Medium)](https://leetcode.com/problems/is-graph-bipartite/description/)
|
||||
|
||||
@ -72,7 +72,7 @@ private boolean isBipartite(int curNode, int curColor, int[] colors, int[][] gra
|
||||
|
||||
常用于在具有先序关系的任务规划中。
|
||||
|
||||
## 课程安排的合法性
|
||||
## 1. 课程安排的合法性
|
||||
|
||||
[207. Course Schedule (Medium)](https://leetcode.com/problems/course-schedule/description/)
|
||||
|
||||
@ -130,7 +130,7 @@ private boolean hasCycle(boolean[] globalMarked, boolean[] localMarked,
|
||||
}
|
||||
```
|
||||
|
||||
## 课程安排的顺序
|
||||
## 2. 课程安排的顺序
|
||||
|
||||
[210. Course Schedule II (Medium)](https://leetcode.com/problems/course-schedule-ii/description/)
|
||||
|
||||
@ -193,7 +193,7 @@ private boolean hasCycle(boolean[] globalMarked, boolean[] localMarked, List<Int
|
||||
|
||||
并查集可以动态地连通两个点,并且可以非常快速地判断两个点是否连通。
|
||||
|
||||
## 冗余连接
|
||||
## 1. 冗余连接
|
||||
|
||||
[684. Redundant Connection (Medium)](https://leetcode.com/problems/redundant-connection/description/)
|
||||
|
||||
|
@ -1,17 +1,17 @@
|
||||
<!-- GFM-TOC -->
|
||||
* [字符串循环移位包含](#字符串循环移位包含)
|
||||
* [字符串循环移位](#字符串循环移位)
|
||||
* [字符串中单词的翻转](#字符串中单词的翻转)
|
||||
* [两个字符串包含的字符是否完全相同](#两个字符串包含的字符是否完全相同)
|
||||
* [计算一组字符集合可以组成的回文字符串的最大长度](#计算一组字符集合可以组成的回文字符串的最大长度)
|
||||
* [字符串同构](#字符串同构)
|
||||
* [回文子字符串个数](#回文子字符串个数)
|
||||
* [判断一个整数是否是回文数](#判断一个整数是否是回文数)
|
||||
* [统计二进制字符串中连续 1 和连续 0 数量相同的子字符串个数](#统计二进制字符串中连续-1-和连续-0-数量相同的子字符串个数)
|
||||
* [1. 字符串循环移位包含](#1-字符串循环移位包含)
|
||||
* [2. 字符串循环移位](#2-字符串循环移位)
|
||||
* [3. 字符串中单词的翻转](#3-字符串中单词的翻转)
|
||||
* [4. 两个字符串包含的字符是否完全相同](#4-两个字符串包含的字符是否完全相同)
|
||||
* [5. 计算一组字符集合可以组成的回文字符串的最大长度](#5-计算一组字符集合可以组成的回文字符串的最大长度)
|
||||
* [6. 字符串同构](#6-字符串同构)
|
||||
* [7. 回文子字符串个数](#7-回文子字符串个数)
|
||||
* [8. 判断一个整数是否是回文数](#8-判断一个整数是否是回文数)
|
||||
* [9. 统计二进制字符串中连续 1 和连续 0 数量相同的子字符串个数](#9-统计二进制字符串中连续-1-和连续-0-数量相同的子字符串个数)
|
||||
<!-- GFM-TOC -->
|
||||
|
||||
|
||||
# 字符串循环移位包含
|
||||
# 1. 字符串循环移位包含
|
||||
|
||||
[编程之美 3.1](#)
|
||||
|
||||
@ -24,7 +24,7 @@ Return : true
|
||||
|
||||
s1 进行循环移位的结果是 s1s1 的子字符串,因此只要判断 s2 是否是 s1s1 的子字符串即可。
|
||||
|
||||
# 字符串循环移位
|
||||
# 2. 字符串循环移位
|
||||
|
||||
[编程之美 2.17](#)
|
||||
|
||||
@ -37,7 +37,7 @@ Return "123abcd"
|
||||
|
||||
将 abcd123 中的 abcd 和 123 单独翻转,得到 dcba321,然后对整个字符串进行翻转,得到 123abcd。
|
||||
|
||||
# 字符串中单词的翻转
|
||||
# 3. 字符串中单词的翻转
|
||||
|
||||
[程序员代码面试指南](#)
|
||||
|
||||
@ -48,7 +48,7 @@ Return "student a am I"
|
||||
|
||||
将每个单词翻转,然后将整个字符串翻转。
|
||||
|
||||
# 两个字符串包含的字符是否完全相同
|
||||
# 4. 两个字符串包含的字符是否完全相同
|
||||
|
||||
[242. Valid Anagram (Easy)](https://leetcode.com/problems/valid-anagram/description/)
|
||||
|
||||
@ -79,7 +79,7 @@ public boolean isAnagram(String s, String t) {
|
||||
}
|
||||
```
|
||||
|
||||
# 计算一组字符集合可以组成的回文字符串的最大长度
|
||||
# 5. 计算一组字符集合可以组成的回文字符串的最大长度
|
||||
|
||||
[409. Longest Palindrome (Easy)](https://leetcode.com/problems/longest-palindrome/description/)
|
||||
|
||||
@ -110,7 +110,7 @@ public int longestPalindrome(String s) {
|
||||
}
|
||||
```
|
||||
|
||||
# 字符串同构
|
||||
# 6. 字符串同构
|
||||
|
||||
[205. Isomorphic Strings (Easy)](https://leetcode.com/problems/isomorphic-strings/description/)
|
||||
|
||||
@ -138,7 +138,7 @@ public boolean isIsomorphic(String s, String t) {
|
||||
}
|
||||
```
|
||||
|
||||
# 回文子字符串个数
|
||||
# 7. 回文子字符串个数
|
||||
|
||||
[647. Palindromic Substrings (Medium)](https://leetcode.com/problems/palindromic-substrings/description/)
|
||||
|
||||
@ -170,7 +170,7 @@ private void extendSubstrings(String s, int start, int end) {
|
||||
}
|
||||
```
|
||||
|
||||
# 判断一个整数是否是回文数
|
||||
# 8. 判断一个整数是否是回文数
|
||||
|
||||
[9. Palindrome Number (Easy)](https://leetcode.com/problems/palindrome-number/description/)
|
||||
|
||||
@ -195,7 +195,7 @@ public boolean isPalindrome(int x) {
|
||||
}
|
||||
```
|
||||
|
||||
# 统计二进制字符串中连续 1 和连续 0 数量相同的子字符串个数
|
||||
# 9. 统计二进制字符串中连续 1 和连续 0 数量相同的子字符串个数
|
||||
|
||||
[696. Count Binary Substrings (Easy)](https://leetcode.com/problems/count-binary-substrings/description/)
|
||||
|
||||
|
@ -1,14 +1,14 @@
|
||||
<!-- GFM-TOC -->
|
||||
* [用栈实现队列](#用栈实现队列)
|
||||
* [用队列实现栈](#用队列实现栈)
|
||||
* [最小值栈](#最小值栈)
|
||||
* [用栈实现括号匹配](#用栈实现括号匹配)
|
||||
* [数组中元素与下一个比它大的元素之间的距离](#数组中元素与下一个比它大的元素之间的距离)
|
||||
* [循环数组中比当前元素大的下一个元素](#循环数组中比当前元素大的下一个元素)
|
||||
* [1. 用栈实现队列](#1-用栈实现队列)
|
||||
* [2. 用队列实现栈](#2-用队列实现栈)
|
||||
* [3. 最小值栈](#3-最小值栈)
|
||||
* [4. 用栈实现括号匹配](#4-用栈实现括号匹配)
|
||||
* [5. 数组中元素与下一个比它大的元素之间的距离](#5-数组中元素与下一个比它大的元素之间的距离)
|
||||
* [6. 循环数组中比当前元素大的下一个元素](#6-循环数组中比当前元素大的下一个元素)
|
||||
<!-- GFM-TOC -->
|
||||
|
||||
|
||||
# 用栈实现队列
|
||||
# 1. 用栈实现队列
|
||||
|
||||
[232. Implement Queue using Stacks (Easy)](https://leetcode.com/problems/implement-queue-using-stacks/description/)
|
||||
|
||||
@ -48,7 +48,7 @@ class MyQueue {
|
||||
}
|
||||
```
|
||||
|
||||
# 用队列实现栈
|
||||
# 2. 用队列实现栈
|
||||
|
||||
[225. Implement Stack using Queues (Easy)](https://leetcode.com/problems/implement-stack-using-queues/description/)
|
||||
|
||||
@ -85,7 +85,7 @@ class MyStack {
|
||||
}
|
||||
```
|
||||
|
||||
# 最小值栈
|
||||
# 3. 最小值栈
|
||||
|
||||
[155. Min Stack (Easy)](https://leetcode.com/problems/min-stack/description/)
|
||||
|
||||
@ -126,7 +126,7 @@ class MinStack {
|
||||
|
||||
对于实现最小值队列问题,可以先将队列使用栈来实现,然后就将问题转换为最小值栈,这个问题出现在 编程之美:3.7。
|
||||
|
||||
# 用栈实现括号匹配
|
||||
# 4. 用栈实现括号匹配
|
||||
|
||||
[20. Valid Parentheses (Easy)](https://leetcode.com/problems/valid-parentheses/description/)
|
||||
|
||||
@ -159,7 +159,7 @@ public boolean isValid(String s) {
|
||||
}
|
||||
```
|
||||
|
||||
# 数组中元素与下一个比它大的元素之间的距离
|
||||
# 5. 数组中元素与下一个比它大的元素之间的距离
|
||||
|
||||
[739. Daily Temperatures (Medium)](https://leetcode.com/problems/daily-temperatures/description/)
|
||||
|
||||
@ -186,7 +186,7 @@ public int[] dailyTemperatures(int[] temperatures) {
|
||||
}
|
||||
```
|
||||
|
||||
# 循环数组中比当前元素大的下一个元素
|
||||
# 6. 循环数组中比当前元素大的下一个元素
|
||||
|
||||
[503. Next Greater Element II (Medium)](https://leetcode.com/problems/next-greater-element-ii/description/)
|
||||
|
||||
|
@ -1,40 +1,40 @@
|
||||
<!-- GFM-TOC -->
|
||||
* [递归](#递归)
|
||||
* [树的高度](#树的高度)
|
||||
* [平衡树](#平衡树)
|
||||
* [两节点的最长路径](#两节点的最长路径)
|
||||
* [翻转树](#翻转树)
|
||||
* [归并两棵树](#归并两棵树)
|
||||
* [判断路径和是否等于一个数](#判断路径和是否等于一个数)
|
||||
* [统计路径和等于一个数的路径数量](#统计路径和等于一个数的路径数量)
|
||||
* [子树](#子树)
|
||||
* [树的对称](#树的对称)
|
||||
* [最小路径](#最小路径)
|
||||
* [统计左叶子节点的和](#统计左叶子节点的和)
|
||||
* [相同节点值的最大路径长度](#相同节点值的最大路径长度)
|
||||
* [间隔遍历](#间隔遍历)
|
||||
* [找出二叉树中第二小的节点](#找出二叉树中第二小的节点)
|
||||
* [1. 树的高度](#1-树的高度)
|
||||
* [2. 平衡树](#2-平衡树)
|
||||
* [3. 两节点的最长路径](#3-两节点的最长路径)
|
||||
* [4. 翻转树](#4-翻转树)
|
||||
* [5. 归并两棵树](#5-归并两棵树)
|
||||
* [6. 判断路径和是否等于一个数](#6-判断路径和是否等于一个数)
|
||||
* [7. 统计路径和等于一个数的路径数量](#7-统计路径和等于一个数的路径数量)
|
||||
* [8. 子树](#8-子树)
|
||||
* [9. 树的对称](#9-树的对称)
|
||||
* [10. 最小路径](#10-最小路径)
|
||||
* [11. 统计左叶子节点的和](#11-统计左叶子节点的和)
|
||||
* [12. 相同节点值的最大路径长度](#12-相同节点值的最大路径长度)
|
||||
* [13. 间隔遍历](#13-间隔遍历)
|
||||
* [14. 找出二叉树中第二小的节点](#14-找出二叉树中第二小的节点)
|
||||
* [层次遍历](#层次遍历)
|
||||
* [一棵树每层节点的平均数](#一棵树每层节点的平均数)
|
||||
* [得到左下角的节点](#得到左下角的节点)
|
||||
* [1. 一棵树每层节点的平均数](#1-一棵树每层节点的平均数)
|
||||
* [2. 得到左下角的节点](#2-得到左下角的节点)
|
||||
* [前中后序遍历](#前中后序遍历)
|
||||
* [非递归实现二叉树的前序遍历](#非递归实现二叉树的前序遍历)
|
||||
* [非递归实现二叉树的后序遍历](#非递归实现二叉树的后序遍历)
|
||||
* [非递归实现二叉树的中序遍历](#非递归实现二叉树的中序遍历)
|
||||
* [1. 非递归实现二叉树的前序遍历](#1-非递归实现二叉树的前序遍历)
|
||||
* [2. 非递归实现二叉树的后序遍历](#2-非递归实现二叉树的后序遍历)
|
||||
* [3. 非递归实现二叉树的中序遍历](#3-非递归实现二叉树的中序遍历)
|
||||
* [BST](#bst)
|
||||
* [修剪二叉查找树](#修剪二叉查找树)
|
||||
* [寻找二叉查找树的第 k 个元素](#寻找二叉查找树的第-k-个元素)
|
||||
* [把二叉查找树每个节点的值都加上比它大的节点的值](#把二叉查找树每个节点的值都加上比它大的节点的值)
|
||||
* [二叉查找树的最近公共祖先](#二叉查找树的最近公共祖先)
|
||||
* [二叉树的最近公共祖先](#二叉树的最近公共祖先)
|
||||
* [从有序数组中构造二叉查找树](#从有序数组中构造二叉查找树)
|
||||
* [根据有序链表构造平衡的二叉查找树](#根据有序链表构造平衡的二叉查找树)
|
||||
* [在二叉查找树中寻找两个节点,使它们的和为一个给定值](#在二叉查找树中寻找两个节点,使它们的和为一个给定值)
|
||||
* [在二叉查找树中查找两个节点之差的最小绝对值](#在二叉查找树中查找两个节点之差的最小绝对值)
|
||||
* [寻找二叉查找树中出现次数最多的值](#寻找二叉查找树中出现次数最多的值)
|
||||
* [1. 修剪二叉查找树](#1-修剪二叉查找树)
|
||||
* [2. 寻找二叉查找树的第 k 个元素](#2-寻找二叉查找树的第-k-个元素)
|
||||
* [3. 把二叉查找树每个节点的值都加上比它大的节点的值](#3-把二叉查找树每个节点的值都加上比它大的节点的值)
|
||||
* [4. 二叉查找树的最近公共祖先](#4-二叉查找树的最近公共祖先)
|
||||
* [5. 二叉树的最近公共祖先](#5-二叉树的最近公共祖先)
|
||||
* [6. 从有序数组中构造二叉查找树](#6-从有序数组中构造二叉查找树)
|
||||
* [7. 根据有序链表构造平衡的二叉查找树](#7-根据有序链表构造平衡的二叉查找树)
|
||||
* [8. 在二叉查找树中寻找两个节点,使它们的和为一个给定值](#8-在二叉查找树中寻找两个节点,使它们的和为一个给定值)
|
||||
* [9. 在二叉查找树中查找两个节点之差的最小绝对值](#9-在二叉查找树中查找两个节点之差的最小绝对值)
|
||||
* [10. 寻找二叉查找树中出现次数最多的值](#10-寻找二叉查找树中出现次数最多的值)
|
||||
* [Trie](#trie)
|
||||
* [实现一个 Trie](#实现一个-trie)
|
||||
* [实现一个 Trie,用来求前缀和](#实现一个-trie,用来求前缀和)
|
||||
* [1. 实现一个 Trie](#1-实现一个-trie)
|
||||
* [2. 实现一个 Trie,用来求前缀和](#2-实现一个-trie,用来求前缀和)
|
||||
<!-- GFM-TOC -->
|
||||
|
||||
|
||||
@ -42,7 +42,7 @@
|
||||
|
||||
一棵树要么是空树,要么有两个指针,每个指针指向一棵树。树是一种递归结构,很多树的问题可以使用递归来处理。
|
||||
|
||||
## 树的高度
|
||||
## 1. 树的高度
|
||||
|
||||
[104. Maximum Depth of Binary Tree (Easy)](https://leetcode.com/problems/maximum-depth-of-binary-tree/description/)
|
||||
|
||||
@ -53,7 +53,7 @@ public int maxDepth(TreeNode root) {
|
||||
}
|
||||
```
|
||||
|
||||
## 平衡树
|
||||
## 2. 平衡树
|
||||
|
||||
[110. Balanced Binary Tree (Easy)](https://leetcode.com/problems/balanced-binary-tree/description/)
|
||||
|
||||
@ -84,7 +84,7 @@ public int maxDepth(TreeNode root) {
|
||||
}
|
||||
```
|
||||
|
||||
## 两节点的最长路径
|
||||
## 3. 两节点的最长路径
|
||||
|
||||
[543. Diameter of Binary Tree (Easy)](https://leetcode.com/problems/diameter-of-binary-tree/description/)
|
||||
|
||||
@ -117,7 +117,7 @@ private int depth(TreeNode root) {
|
||||
}
|
||||
```
|
||||
|
||||
## 翻转树
|
||||
## 4. 翻转树
|
||||
|
||||
[226. Invert Binary Tree (Easy)](https://leetcode.com/problems/invert-binary-tree/description/)
|
||||
|
||||
@ -131,7 +131,7 @@ public TreeNode invertTree(TreeNode root) {
|
||||
}
|
||||
```
|
||||
|
||||
## 归并两棵树
|
||||
## 5. 归并两棵树
|
||||
|
||||
[617. Merge Two Binary Trees (Easy)](https://leetcode.com/problems/merge-two-binary-trees/description/)
|
||||
|
||||
@ -164,7 +164,7 @@ public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
|
||||
}
|
||||
```
|
||||
|
||||
## 判断路径和是否等于一个数
|
||||
## 6. 判断路径和是否等于一个数
|
||||
|
||||
[Leetcdoe : 112. Path Sum (Easy)](https://leetcode.com/problems/path-sum/description/)
|
||||
|
||||
@ -192,7 +192,7 @@ public boolean hasPathSum(TreeNode root, int sum) {
|
||||
}
|
||||
```
|
||||
|
||||
## 统计路径和等于一个数的路径数量
|
||||
## 7. 统计路径和等于一个数的路径数量
|
||||
|
||||
[437. Path Sum III (Easy)](https://leetcode.com/problems/path-sum-iii/description/)
|
||||
|
||||
@ -232,7 +232,7 @@ private int pathSumStartWithRoot(TreeNode root, int sum) {
|
||||
}
|
||||
```
|
||||
|
||||
## 子树
|
||||
## 8. 子树
|
||||
|
||||
[572. Subtree of Another Tree (Easy)](https://leetcode.com/problems/subtree-of-another-tree/description/)
|
||||
|
||||
@ -283,7 +283,7 @@ private boolean isSubtreeWithRoot(TreeNode s, TreeNode t) {
|
||||
}
|
||||
```
|
||||
|
||||
## 树的对称
|
||||
## 9. 树的对称
|
||||
|
||||
[101. Symmetric Tree (Easy)](https://leetcode.com/problems/symmetric-tree/description/)
|
||||
|
||||
@ -309,7 +309,7 @@ private boolean isSymmetric(TreeNode t1, TreeNode t2) {
|
||||
}
|
||||
```
|
||||
|
||||
## 最小路径
|
||||
## 10. 最小路径
|
||||
|
||||
[111. Minimum Depth of Binary Tree (Easy)](https://leetcode.com/problems/minimum-depth-of-binary-tree/description/)
|
||||
|
||||
@ -325,7 +325,7 @@ public int minDepth(TreeNode root) {
|
||||
}
|
||||
```
|
||||
|
||||
## 统计左叶子节点的和
|
||||
## 11. 统计左叶子节点的和
|
||||
|
||||
[404. Sum of Left Leaves (Easy)](https://leetcode.com/problems/sum-of-left-leaves/description/)
|
||||
|
||||
@ -352,7 +352,7 @@ private boolean isLeaf(TreeNode node){
|
||||
}
|
||||
```
|
||||
|
||||
## 相同节点值的最大路径长度
|
||||
## 12. 相同节点值的最大路径长度
|
||||
|
||||
[687. Longest Univalue Path (Easy)](https://leetcode.com/problems/longest-univalue-path/)
|
||||
|
||||
@ -385,7 +385,7 @@ private int dfs(TreeNode root){
|
||||
}
|
||||
```
|
||||
|
||||
## 间隔遍历
|
||||
## 13. 间隔遍历
|
||||
|
||||
[337. House Robber III (Medium)](https://leetcode.com/problems/house-robber-iii/description/)
|
||||
|
||||
@ -409,7 +409,7 @@ public int rob(TreeNode root) {
|
||||
}
|
||||
```
|
||||
|
||||
## 找出二叉树中第二小的节点
|
||||
## 14. 找出二叉树中第二小的节点
|
||||
|
||||
[671. Second Minimum Node In a Binary Tree (Easy)](https://leetcode.com/problems/second-minimum-node-in-a-binary-tree/description/)
|
||||
|
||||
@ -444,7 +444,7 @@ public int findSecondMinimumValue(TreeNode root) {
|
||||
|
||||
使用 BFS 进行层次遍历。不需要使用两个队列来分别存储当前层的节点和下一层的节点,因为在开始遍历一层的节点时,当前队列中的节点数就是当前层的节点数,只要控制遍历这么多节点数,就能保证这次遍历的都是当前层的节点。
|
||||
|
||||
## 一棵树每层节点的平均数
|
||||
## 1. 一棵树每层节点的平均数
|
||||
|
||||
[637. Average of Levels in Binary Tree (Easy)](https://leetcode.com/problems/average-of-levels-in-binary-tree/description/)
|
||||
|
||||
@ -469,7 +469,7 @@ public List<Double> averageOfLevels(TreeNode root) {
|
||||
}
|
||||
```
|
||||
|
||||
## 得到左下角的节点
|
||||
## 2. 得到左下角的节点
|
||||
|
||||
[513. Find Bottom Left Tree Value (Easy)](https://leetcode.com/problems/find-bottom-left-tree-value/description/)
|
||||
|
||||
@ -550,7 +550,7 @@ void dfs(TreeNode root) {
|
||||
}
|
||||
```
|
||||
|
||||
## 非递归实现二叉树的前序遍历
|
||||
## 1. 非递归实现二叉树的前序遍历
|
||||
|
||||
[144. Binary Tree Preorder Traversal (Medium)](https://leetcode.com/problems/binary-tree-preorder-traversal/description/)
|
||||
|
||||
@ -570,7 +570,7 @@ public List<Integer> preorderTraversal(TreeNode root) {
|
||||
}
|
||||
```
|
||||
|
||||
## 非递归实现二叉树的后序遍历
|
||||
## 2. 非递归实现二叉树的后序遍历
|
||||
|
||||
[145. Binary Tree Postorder Traversal (Medium)](https://leetcode.com/problems/binary-tree-postorder-traversal/description/)
|
||||
|
||||
@ -593,7 +593,7 @@ public List<Integer> postorderTraversal(TreeNode root) {
|
||||
}
|
||||
```
|
||||
|
||||
## 非递归实现二叉树的中序遍历
|
||||
## 3. 非递归实现二叉树的中序遍历
|
||||
|
||||
[94. Binary Tree Inorder Traversal (Medium)](https://leetcode.com/problems/binary-tree-inorder-traversal/description/)
|
||||
|
||||
@ -622,7 +622,7 @@ public List<Integer> inorderTraversal(TreeNode root) {
|
||||
|
||||
二叉查找树中序遍历有序。
|
||||
|
||||
## 修剪二叉查找树
|
||||
## 1. 修剪二叉查找树
|
||||
|
||||
[669. Trim a Binary Search Tree (Easy)](https://leetcode.com/problems/trim-a-binary-search-tree/description/)
|
||||
|
||||
@ -662,7 +662,7 @@ public TreeNode trimBST(TreeNode root, int L, int R) {
|
||||
}
|
||||
```
|
||||
|
||||
## 寻找二叉查找树的第 k 个元素
|
||||
## 2. 寻找二叉查找树的第 k 个元素
|
||||
|
||||
[230. Kth Smallest Element in a BST (Medium)](https://leetcode.com/problems/kth-smallest-element-in-a-bst/description/)
|
||||
|
||||
@ -706,7 +706,7 @@ private int count(TreeNode node) {
|
||||
}
|
||||
```
|
||||
|
||||
## 把二叉查找树每个节点的值都加上比它大的节点的值
|
||||
## 3. 把二叉查找树每个节点的值都加上比它大的节点的值
|
||||
|
||||
[Convert BST to Greater Tree (Easy)](https://leetcode.com/problems/convert-bst-to-greater-tree/description/)
|
||||
|
||||
@ -743,7 +743,7 @@ private void traver(TreeNode node) {
|
||||
}
|
||||
```
|
||||
|
||||
## 二叉查找树的最近公共祖先
|
||||
## 4. 二叉查找树的最近公共祖先
|
||||
|
||||
[235. Lowest Common Ancestor of a Binary Search Tree (Easy)](https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/description/)
|
||||
|
||||
@ -767,7 +767,7 @@ public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
|
||||
}
|
||||
```
|
||||
|
||||
## 二叉树的最近公共祖先
|
||||
## 5. 二叉树的最近公共祖先
|
||||
|
||||
[236. Lowest Common Ancestor of a Binary Tree (Medium) ](https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/description/)
|
||||
|
||||
@ -792,7 +792,7 @@ public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
|
||||
}
|
||||
```
|
||||
|
||||
## 从有序数组中构造二叉查找树
|
||||
## 6. 从有序数组中构造二叉查找树
|
||||
|
||||
[108. Convert Sorted Array to Binary Search Tree (Easy)](https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/description/)
|
||||
|
||||
@ -811,7 +811,7 @@ private TreeNode toBST(int[] nums, int sIdx, int eIdx){
|
||||
}
|
||||
```
|
||||
|
||||
## 根据有序链表构造平衡的二叉查找树
|
||||
## 7. 根据有序链表构造平衡的二叉查找树
|
||||
|
||||
[109. Convert Sorted List to Binary Search Tree (Medium)](https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/description/)
|
||||
|
||||
@ -852,7 +852,7 @@ private ListNode preMid(ListNode head) {
|
||||
}
|
||||
```
|
||||
|
||||
## 在二叉查找树中寻找两个节点,使它们的和为一个给定值
|
||||
## 8. 在二叉查找树中寻找两个节点,使它们的和为一个给定值
|
||||
|
||||
[653. Two Sum IV - Input is a BST (Easy)](https://leetcode.com/problems/two-sum-iv-input-is-a-bst/description/)
|
||||
|
||||
@ -896,7 +896,7 @@ private void inOrder(TreeNode root, List<Integer> nums) {
|
||||
}
|
||||
```
|
||||
|
||||
## 在二叉查找树中查找两个节点之差的最小绝对值
|
||||
## 9. 在二叉查找树中查找两个节点之差的最小绝对值
|
||||
|
||||
[530. Minimum Absolute Difference in BST (Easy)](https://leetcode.com/problems/minimum-absolute-difference-in-bst/description/)
|
||||
|
||||
@ -934,7 +934,7 @@ private void inOrder(TreeNode node) {
|
||||
}
|
||||
```
|
||||
|
||||
## 寻找二叉查找树中出现次数最多的值
|
||||
## 10. 寻找二叉查找树中出现次数最多的值
|
||||
|
||||
[501. Find Mode in Binary Search Tree (Easy)](https://leetcode.com/problems/find-mode-in-binary-search-tree/description/)
|
||||
|
||||
@ -991,7 +991,7 @@ private void inOrder(TreeNode node, List<Integer> nums) {
|
||||
|
||||
Trie,又称前缀树或字典树,用于判断字符串是否存在或者是否具有某种字符串前缀。
|
||||
|
||||
## 实现一个 Trie
|
||||
## 1. 实现一个 Trie
|
||||
|
||||
[208. Implement Trie (Prefix Tree) (Medium)](https://leetcode.com/problems/implement-trie-prefix-tree/description/)
|
||||
|
||||
@ -1053,7 +1053,7 @@ class Trie {
|
||||
}
|
||||
```
|
||||
|
||||
## 实现一个 Trie,用来求前缀和
|
||||
## 2. 实现一个 Trie,用来求前缀和
|
||||
|
||||
[677. Map Sum Pairs (Medium)](https://leetcode.com/problems/map-sum-pairs/description/)
|
||||
|
||||
|
@ -1,20 +1,20 @@
|
||||
<!-- GFM-TOC -->
|
||||
* [找出两个链表的交点](#找出两个链表的交点)
|
||||
* [链表反转](#链表反转)
|
||||
* [归并两个有序的链表](#归并两个有序的链表)
|
||||
* [从有序链表中删除重复节点](#从有序链表中删除重复节点)
|
||||
* [删除链表的倒数第 n 个节点](#删除链表的倒数第-n-个节点)
|
||||
* [交换链表中的相邻结点](#交换链表中的相邻结点)
|
||||
* [链表求和](#链表求和)
|
||||
* [回文链表](#回文链表)
|
||||
* [分隔链表](#分隔链表)
|
||||
* [链表元素按奇偶聚集](#链表元素按奇偶聚集)
|
||||
* [1. 找出两个链表的交点](#1-找出两个链表的交点)
|
||||
* [2. 链表反转](#2-链表反转)
|
||||
* [3. 归并两个有序的链表](#3-归并两个有序的链表)
|
||||
* [4. 从有序链表中删除重复节点](#4-从有序链表中删除重复节点)
|
||||
* [5. 删除链表的倒数第 n 个节点](#5-删除链表的倒数第-n-个节点)
|
||||
* [6. 交换链表中的相邻结点](#6-交换链表中的相邻结点)
|
||||
* [7. 链表求和](#7-链表求和)
|
||||
* [8. 回文链表](#8-回文链表)
|
||||
* [9. 分隔链表](#9-分隔链表)
|
||||
* [10. 链表元素按奇偶聚集](#10-链表元素按奇偶聚集)
|
||||
<!-- GFM-TOC -->
|
||||
|
||||
|
||||
链表是空节点,或者有一个值和一个指向下一个链表的指针,因此很多链表问题可以用递归来处理。
|
||||
|
||||
# 找出两个链表的交点
|
||||
# 1. 找出两个链表的交点
|
||||
|
||||
[160. Intersection of Two Linked Lists (Easy)](https://leetcode.com/problems/intersection-of-two-linked-lists/description/)
|
||||
|
||||
@ -48,7 +48,7 @@ public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
|
||||
- 把第一个链表的结尾连接到第二个链表的开头,看第二个链表是否存在环;
|
||||
- 或者直接比较两个链表的最后一个节点是否相同。
|
||||
|
||||
# 链表反转
|
||||
# 2. 链表反转
|
||||
|
||||
[206. Reverse Linked List (Easy)](https://leetcode.com/problems/reverse-linked-list/description/)
|
||||
|
||||
@ -82,7 +82,7 @@ public ListNode reverseList(ListNode head) {
|
||||
}
|
||||
```
|
||||
|
||||
# 归并两个有序的链表
|
||||
# 3. 归并两个有序的链表
|
||||
|
||||
[21. Merge Two Sorted Lists (Easy)](https://leetcode.com/problems/merge-two-sorted-lists/description/)
|
||||
|
||||
@ -100,7 +100,7 @@ public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
|
||||
}
|
||||
```
|
||||
|
||||
# 从有序链表中删除重复节点
|
||||
# 4. 从有序链表中删除重复节点
|
||||
|
||||
[83. Remove Duplicates from Sorted List (Easy)](https://leetcode.com/problems/remove-duplicates-from-sorted-list/description/)
|
||||
|
||||
@ -117,7 +117,7 @@ public ListNode deleteDuplicates(ListNode head) {
|
||||
}
|
||||
```
|
||||
|
||||
# 删除链表的倒数第 n 个节点
|
||||
# 5. 删除链表的倒数第 n 个节点
|
||||
|
||||
[19. Remove Nth Node From End of List (Medium)](https://leetcode.com/problems/remove-nth-node-from-end-of-list/description/)
|
||||
|
||||
@ -143,7 +143,7 @@ public ListNode removeNthFromEnd(ListNode head, int n) {
|
||||
}
|
||||
```
|
||||
|
||||
# 交换链表中的相邻结点
|
||||
# 6. 交换链表中的相邻结点
|
||||
|
||||
[24. Swap Nodes in Pairs (Medium)](https://leetcode.com/problems/swap-nodes-in-pairs/description/)
|
||||
|
||||
@ -171,7 +171,7 @@ public ListNode swapPairs(ListNode head) {
|
||||
}
|
||||
```
|
||||
|
||||
# 链表求和
|
||||
# 7. 链表求和
|
||||
|
||||
[445. Add Two Numbers II (Medium)](https://leetcode.com/problems/add-two-numbers-ii/description/)
|
||||
|
||||
@ -210,7 +210,7 @@ private Stack<Integer> buildStack(ListNode l) {
|
||||
}
|
||||
```
|
||||
|
||||
# 回文链表
|
||||
# 8. 回文链表
|
||||
|
||||
[234. Palindrome Linked List (Easy)](https://leetcode.com/problems/palindrome-linked-list/description/)
|
||||
|
||||
@ -259,7 +259,7 @@ private boolean isEqual(ListNode l1, ListNode l2) {
|
||||
}
|
||||
```
|
||||
|
||||
# 分隔链表
|
||||
# 9. 分隔链表
|
||||
|
||||
[725. Split Linked List in Parts(Medium)](https://leetcode.com/problems/split-linked-list-in-parts/description/)
|
||||
|
||||
@ -299,7 +299,7 @@ public ListNode[] splitListToParts(ListNode root, int k) {
|
||||
}
|
||||
```
|
||||
|
||||
# 链表元素按奇偶聚集
|
||||
# 10. 链表元素按奇偶聚集
|
||||
|
||||
[328. Odd Even Linked List (Medium)](https://leetcode.com/problems/odd-even-linked-list/description/)
|
||||
|
||||
|
@ -1,23 +1,14 @@
|
||||
<!-- GFM-TOC -->
|
||||
* [原理](#原理)
|
||||
* [1. 正常实现](#1-正常实现)
|
||||
* [2. 时间复杂度](#2-时间复杂度)
|
||||
* [3. m 计算](#3-m-计算)
|
||||
* [4. 未成功查找的返回值](#4-未成功查找的返回值)
|
||||
* [5. 变种](#5-变种)
|
||||
* [例题](#例题)
|
||||
* [1. 求开方](#1-求开方)
|
||||
* [2. 大于给定元素的最小元素](#2-大于给定元素的最小元素)
|
||||
* [3. 有序数组的 Single Element](#3-有序数组的-single-element)
|
||||
* [4. 第一个错误的版本](#4-第一个错误的版本)
|
||||
* [5. 旋转数组的最小数字](#5-旋转数组的最小数字)
|
||||
* [6. 查找区间](#6-查找区间)
|
||||
* [1. 求开方](#1-求开方)
|
||||
* [2. 大于给定元素的最小元素](#2-大于给定元素的最小元素)
|
||||
* [3. 有序数组的 Single Element](#3-有序数组的-single-element)
|
||||
* [4. 第一个错误的版本](#4-第一个错误的版本)
|
||||
* [5. 旋转数组的最小数字](#5-旋转数组的最小数字)
|
||||
* [6. 查找区间](#6-查找区间)
|
||||
<!-- GFM-TOC -->
|
||||
|
||||
|
||||
# 原理
|
||||
|
||||
## 1. 正常实现
|
||||
**正常实现**
|
||||
|
||||
```text
|
||||
Input : [1,2,3,4,5]
|
||||
@ -42,11 +33,11 @@ public int binarySearch(int[] nums, int key) {
|
||||
}
|
||||
```
|
||||
|
||||
## 2. 时间复杂度
|
||||
**时间复杂度**
|
||||
|
||||
二分查找也称为折半查找,每次都能将查找区间减半,这种折半特性的算法时间复杂度为 O(logN)。
|
||||
|
||||
## 3. m 计算
|
||||
**m 计算**
|
||||
|
||||
有两种计算中值 m 的方式:
|
||||
|
||||
@ -55,14 +46,14 @@ public int binarySearch(int[] nums, int key) {
|
||||
|
||||
l + h 可能出现加法溢出,也就是说加法的结果大于整型能够表示的范围。但是 l 和 h 都为正数,因此 h - l 不会出现加法溢出问题。所以,最好使用第二种计算法方法。
|
||||
|
||||
## 4. 未成功查找的返回值
|
||||
**未成功查找的返回值**
|
||||
|
||||
循环退出时如果仍然没有查找到 key,那么表示查找失败。可以有两种返回值:
|
||||
|
||||
- -1:以一个错误码表示没有查找到 key
|
||||
- l:将 key 插入到 nums 中的正确位置
|
||||
|
||||
## 5. 变种
|
||||
**变种**
|
||||
|
||||
二分查找可以有很多变种,变种实现要注意边界值的判断。例如在一个有重复元素的数组中查找 key 的最左位置的实现如下:
|
||||
|
||||
@ -103,9 +94,7 @@ l m h
|
||||
|
||||
当循环体退出时,不表示没有查找到 key,因此最后返回的结果不应该为 -1。为了验证有没有查找到,需要在调用端判断一下返回位置上的值和 key 是否相等。
|
||||
|
||||
# 例题
|
||||
|
||||
## 1. 求开方
|
||||
# 1. 求开方
|
||||
|
||||
[69. Sqrt(x) (Easy)](https://leetcode.com/problems/sqrtx/description/)
|
||||
|
||||
@ -143,7 +132,7 @@ public int mySqrt(int x) {
|
||||
}
|
||||
```
|
||||
|
||||
## 2. 大于给定元素的最小元素
|
||||
# 2. 大于给定元素的最小元素
|
||||
|
||||
[744. Find Smallest Letter Greater Than Target (Easy)](https://leetcode.com/problems/find-smallest-letter-greater-than-target/description/)
|
||||
|
||||
@ -177,7 +166,7 @@ public char nextGreatestLetter(char[] letters, char target) {
|
||||
}
|
||||
```
|
||||
|
||||
## 3. 有序数组的 Single Element
|
||||
# 3. 有序数组的 Single Element
|
||||
|
||||
[540. Single Element in a Sorted Array (Medium)](https://leetcode.com/problems/single-element-in-a-sorted-array/description/)
|
||||
|
||||
@ -214,7 +203,7 @@ public int singleNonDuplicate(int[] nums) {
|
||||
}
|
||||
```
|
||||
|
||||
## 4. 第一个错误的版本
|
||||
# 4. 第一个错误的版本
|
||||
|
||||
[278. First Bad Version (Easy)](https://leetcode.com/problems/first-bad-version/description/)
|
||||
|
||||
@ -239,7 +228,7 @@ public int firstBadVersion(int n) {
|
||||
}
|
||||
```
|
||||
|
||||
## 5. 旋转数组的最小数字
|
||||
# 5. 旋转数组的最小数字
|
||||
|
||||
[153. Find Minimum in Rotated Sorted Array (Medium)](https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/description/)
|
||||
|
||||
@ -263,7 +252,7 @@ public int findMin(int[] nums) {
|
||||
}
|
||||
```
|
||||
|
||||
## 6. 查找区间
|
||||
# 6. 查找区间
|
||||
|
||||
[34. Find First and Last Position of Element in Sorted Array](https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/)
|
||||
|
||||
|
@ -1,28 +1,21 @@
|
||||
<!-- GFM-TOC -->
|
||||
* [原理](#原理)
|
||||
* [1. 基本原理](#1-基本原理)
|
||||
* [2. mask 计算](#2-mask-计算)
|
||||
* [3. Java 中的位操作](#3-java-中的位操作)
|
||||
* [例题](#例题)
|
||||
* [统计两个数的二进制表示有多少位不同](#统计两个数的二进制表示有多少位不同)
|
||||
* [数组中唯一一个不重复的元素](#数组中唯一一个不重复的元素)
|
||||
* [找出数组中缺失的那个数](#找出数组中缺失的那个数)
|
||||
* [数组中不重复的两个元素](#数组中不重复的两个元素)
|
||||
* [翻转一个数的比特位](#翻转一个数的比特位)
|
||||
* [不用额外变量交换两个整数](#不用额外变量交换两个整数)
|
||||
* [判断一个数是不是 2 的 n 次方](#判断一个数是不是-2-的-n-次方)
|
||||
* [判断一个数是不是 4 的 n 次方](#判断一个数是不是-4-的-n-次方)
|
||||
* [判断一个数的位级表示是否不会出现连续的 0 和 1](#判断一个数的位级表示是否不会出现连续的-0-和-1)
|
||||
* [求一个数的补码](#求一个数的补码)
|
||||
* [实现整数的加法](#实现整数的加法)
|
||||
* [字符串数组最大乘积](#字符串数组最大乘积)
|
||||
* [统计从 0 \~ n 每个数的二进制表示中 1 的个数](#统计从-0-\~-n-每个数的二进制表示中-1-的个数)
|
||||
* [1. 统计两个数的二进制表示有多少位不同](#1-统计两个数的二进制表示有多少位不同)
|
||||
* [2. 数组中唯一一个不重复的元素](#2-数组中唯一一个不重复的元素)
|
||||
* [3. 找出数组中缺失的那个数](#3-找出数组中缺失的那个数)
|
||||
* [4. 数组中不重复的两个元素](#4-数组中不重复的两个元素)
|
||||
* [5. 翻转一个数的比特位](#5-翻转一个数的比特位)
|
||||
* [6. 不用额外变量交换两个整数](#6-不用额外变量交换两个整数)
|
||||
* [7. 判断一个数是不是 2 的 n 次方](#7-判断一个数是不是-2-的-n-次方)
|
||||
* [8. 判断一个数是不是 4 的 n 次方](#8--判断一个数是不是-4-的-n-次方)
|
||||
* [9. 判断一个数的位级表示是否不会出现连续的 0 和 1](#9-判断一个数的位级表示是否不会出现连续的-0-和-1)
|
||||
* [10. 求一个数的补码](#10-求一个数的补码)
|
||||
* [11. 实现整数的加法](#11-实现整数的加法)
|
||||
* [12. 字符串数组最大乘积](#12-字符串数组最大乘积)
|
||||
* [13. 统计从 0 \~ n 每个数的二进制表示中 1 的个数](#13-统计从-0-\~-n-每个数的二进制表示中-1-的个数)
|
||||
<!-- GFM-TOC -->
|
||||
|
||||
|
||||
# 原理
|
||||
|
||||
## 1. 基本原理
|
||||
**基本原理**
|
||||
|
||||
0s 表示一串 0,1s 表示一串 1。
|
||||
|
||||
@ -48,7 +41,7 @@ x ^ x = 0 x & x = x x | x = x
|
||||
- \>\>\> n 为无符号右移,左边会补上 0。
|
||||
- << n 为算术左移,相当于乘以 2<sup>n</sup>。
|
||||
|
||||
## 2. mask 计算
|
||||
** mask 计算**
|
||||
|
||||
要获取 111111111,将 0 取反即可,\~0。
|
||||
|
||||
@ -58,7 +51,7 @@ x ^ x = 0 x & x = x x | x = x
|
||||
|
||||
要得到 1 到 i 位为 0 的 mask,只需将 1 到 i 位为 1 的 mask 取反,即 \~(1<<(i+1)-1)。
|
||||
|
||||
## 3. Java 中的位操作
|
||||
**Java 中的位操作**
|
||||
|
||||
```html
|
||||
static int Integer.bitCount(); // 统计 1 的数量
|
||||
@ -66,9 +59,7 @@ static int Integer.highestOneBit(); // 获得最高位
|
||||
static String toBinaryString(int i); // 转换为二进制表示的字符串
|
||||
```
|
||||
|
||||
# 例题
|
||||
|
||||
## 统计两个数的二进制表示有多少位不同
|
||||
# 1. 统计两个数的二进制表示有多少位不同
|
||||
|
||||
[461. Hamming Distance (Easy)](https://leetcode.com/problems/hamming-distance/)
|
||||
|
||||
@ -121,7 +112,7 @@ public int hammingDistance(int x, int y) {
|
||||
}
|
||||
```
|
||||
|
||||
## 数组中唯一一个不重复的元素
|
||||
# 2. 数组中唯一一个不重复的元素
|
||||
|
||||
[136. Single Number (Easy)](https://leetcode.com/problems/single-number/description/)
|
||||
|
||||
@ -140,7 +131,7 @@ public int singleNumber(int[] nums) {
|
||||
}
|
||||
```
|
||||
|
||||
## 找出数组中缺失的那个数
|
||||
# 3. 找出数组中缺失的那个数
|
||||
|
||||
[268. Missing Number (Easy)](https://leetcode.com/problems/missing-number/description/)
|
||||
|
||||
@ -161,7 +152,7 @@ public int missingNumber(int[] nums) {
|
||||
}
|
||||
```
|
||||
|
||||
## 数组中不重复的两个元素
|
||||
# 4. 数组中不重复的两个元素
|
||||
|
||||
[260. Single Number III (Medium)](https://leetcode.com/problems/single-number-iii/description/)
|
||||
|
||||
@ -185,7 +176,7 @@ public int[] singleNumber(int[] nums) {
|
||||
}
|
||||
```
|
||||
|
||||
## 翻转一个数的比特位
|
||||
# 5. 翻转一个数的比特位
|
||||
|
||||
[190. Reverse Bits (Easy)](https://leetcode.com/problems/reverse-bits/description/)
|
||||
|
||||
@ -230,7 +221,7 @@ private int reverseByte(byte b) {
|
||||
}
|
||||
```
|
||||
|
||||
## 不用额外变量交换两个整数
|
||||
# 6. 不用额外变量交换两个整数
|
||||
|
||||
[程序员代码面试指南 :P317](#)
|
||||
|
||||
@ -240,7 +231,7 @@ b = a ^ b;
|
||||
a = a ^ b;
|
||||
```
|
||||
|
||||
## 判断一个数是不是 2 的 n 次方
|
||||
# 7. 判断一个数是不是 2 的 n 次方
|
||||
|
||||
[231. Power of Two (Easy)](https://leetcode.com/problems/power-of-two/description/)
|
||||
|
||||
@ -260,7 +251,7 @@ public boolean isPowerOfTwo(int n) {
|
||||
}
|
||||
```
|
||||
|
||||
## 判断一个数是不是 4 的 n 次方
|
||||
# 8. 判断一个数是不是 4 的 n 次方
|
||||
|
||||
[342. Power of Four (Easy)](https://leetcode.com/problems/power-of-four/)
|
||||
|
||||
@ -280,7 +271,7 @@ public boolean isPowerOfFour(int num) {
|
||||
}
|
||||
```
|
||||
|
||||
## 判断一个数的位级表示是否不会出现连续的 0 和 1
|
||||
# 9. 判断一个数的位级表示是否不会出现连续的 0 和 1
|
||||
|
||||
[693. Binary Number with Alternating Bits (Easy)](https://leetcode.com/problems/binary-number-with-alternating-bits/description/)
|
||||
|
||||
@ -305,7 +296,7 @@ public boolean hasAlternatingBits(int n) {
|
||||
}
|
||||
```
|
||||
|
||||
## 求一个数的补码
|
||||
# 10. 求一个数的补码
|
||||
|
||||
[476. Number Complement (Easy)](https://leetcode.com/problems/number-complement/description/)
|
||||
|
||||
@ -360,7 +351,7 @@ public int findComplement(int num) {
|
||||
}
|
||||
```
|
||||
|
||||
## 实现整数的加法
|
||||
# 11. 实现整数的加法
|
||||
|
||||
[371. Sum of Two Integers (Easy)](https://leetcode.com/problems/sum-of-two-integers/description/)
|
||||
|
||||
@ -374,7 +365,7 @@ public int getSum(int a, int b) {
|
||||
}
|
||||
```
|
||||
|
||||
## 字符串数组最大乘积
|
||||
# 12. 字符串数组最大乘积
|
||||
|
||||
[318. Maximum Product of Word Lengths (Medium)](https://leetcode.com/problems/maximum-product-of-word-lengths/description/)
|
||||
|
||||
@ -409,7 +400,7 @@ public int maxProduct(String[] words) {
|
||||
}
|
||||
```
|
||||
|
||||
## 统计从 0 \~ n 每个数的二进制表示中 1 的个数
|
||||
# 13. 统计从 0 \~ n 每个数的二进制表示中 1 的个数
|
||||
|
||||
[338. Counting Bits (Medium)](https://leetcode.com/problems/counting-bits/description/)
|
||||
|
||||
|
@ -1,11 +1,11 @@
|
||||
<!-- GFM-TOC -->
|
||||
* [二分图](#二分图)
|
||||
* [判断是否为二分图](#判断是否为二分图)
|
||||
* [1. 判断是否为二分图](#1-判断是否为二分图)
|
||||
* [拓扑排序](#拓扑排序)
|
||||
* [课程安排的合法性](#课程安排的合法性)
|
||||
* [课程安排的顺序](#课程安排的顺序)
|
||||
* [1. 课程安排的合法性](#1-课程安排的合法性)
|
||||
* [2. 课程安排的顺序](#2-课程安排的顺序)
|
||||
* [并查集](#并查集)
|
||||
* [冗余连接](#冗余连接)
|
||||
* [1. 冗余连接](#1-冗余连接)
|
||||
<!-- GFM-TOC -->
|
||||
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
|
||||
如果可以用两种颜色对图中的节点进行着色,并且保证相邻的节点颜色不同,那么这个图就是二分图。
|
||||
|
||||
## 判断是否为二分图
|
||||
## 1. 判断是否为二分图
|
||||
|
||||
[785. Is Graph Bipartite? (Medium)](https://leetcode.com/problems/is-graph-bipartite/description/)
|
||||
|
||||
@ -72,7 +72,7 @@ private boolean isBipartite(int curNode, int curColor, int[] colors, int[][] gra
|
||||
|
||||
常用于在具有先序关系的任务规划中。
|
||||
|
||||
## 课程安排的合法性
|
||||
## 1. 课程安排的合法性
|
||||
|
||||
[207. Course Schedule (Medium)](https://leetcode.com/problems/course-schedule/description/)
|
||||
|
||||
@ -130,7 +130,7 @@ private boolean hasCycle(boolean[] globalMarked, boolean[] localMarked,
|
||||
}
|
||||
```
|
||||
|
||||
## 课程安排的顺序
|
||||
## 2. 课程安排的顺序
|
||||
|
||||
[210. Course Schedule II (Medium)](https://leetcode.com/problems/course-schedule-ii/description/)
|
||||
|
||||
@ -193,7 +193,7 @@ private boolean hasCycle(boolean[] globalMarked, boolean[] localMarked, List<Int
|
||||
|
||||
并查集可以动态地连通两个点,并且可以非常快速地判断两个点是否连通。
|
||||
|
||||
## 冗余连接
|
||||
## 1. 冗余连接
|
||||
|
||||
[684. Redundant Connection (Medium)](https://leetcode.com/problems/redundant-connection/description/)
|
||||
|
||||
|
@ -1,17 +1,17 @@
|
||||
<!-- GFM-TOC -->
|
||||
* [字符串循环移位包含](#字符串循环移位包含)
|
||||
* [字符串循环移位](#字符串循环移位)
|
||||
* [字符串中单词的翻转](#字符串中单词的翻转)
|
||||
* [两个字符串包含的字符是否完全相同](#两个字符串包含的字符是否完全相同)
|
||||
* [计算一组字符集合可以组成的回文字符串的最大长度](#计算一组字符集合可以组成的回文字符串的最大长度)
|
||||
* [字符串同构](#字符串同构)
|
||||
* [回文子字符串个数](#回文子字符串个数)
|
||||
* [判断一个整数是否是回文数](#判断一个整数是否是回文数)
|
||||
* [统计二进制字符串中连续 1 和连续 0 数量相同的子字符串个数](#统计二进制字符串中连续-1-和连续-0-数量相同的子字符串个数)
|
||||
* [1. 字符串循环移位包含](#1-字符串循环移位包含)
|
||||
* [2. 字符串循环移位](#2-字符串循环移位)
|
||||
* [3. 字符串中单词的翻转](#3-字符串中单词的翻转)
|
||||
* [4. 两个字符串包含的字符是否完全相同](#4-两个字符串包含的字符是否完全相同)
|
||||
* [5. 计算一组字符集合可以组成的回文字符串的最大长度](#5-计算一组字符集合可以组成的回文字符串的最大长度)
|
||||
* [6. 字符串同构](#6-字符串同构)
|
||||
* [7. 回文子字符串个数](#7-回文子字符串个数)
|
||||
* [8. 判断一个整数是否是回文数](#8-判断一个整数是否是回文数)
|
||||
* [9. 统计二进制字符串中连续 1 和连续 0 数量相同的子字符串个数](#9-统计二进制字符串中连续-1-和连续-0-数量相同的子字符串个数)
|
||||
<!-- GFM-TOC -->
|
||||
|
||||
|
||||
# 字符串循环移位包含
|
||||
# 1. 字符串循环移位包含
|
||||
|
||||
[编程之美 3.1](#)
|
||||
|
||||
@ -24,7 +24,7 @@ Return : true
|
||||
|
||||
s1 进行循环移位的结果是 s1s1 的子字符串,因此只要判断 s2 是否是 s1s1 的子字符串即可。
|
||||
|
||||
# 字符串循环移位
|
||||
# 2. 字符串循环移位
|
||||
|
||||
[编程之美 2.17](#)
|
||||
|
||||
@ -37,7 +37,7 @@ Return "123abcd"
|
||||
|
||||
将 abcd123 中的 abcd 和 123 单独翻转,得到 dcba321,然后对整个字符串进行翻转,得到 123abcd。
|
||||
|
||||
# 字符串中单词的翻转
|
||||
# 3. 字符串中单词的翻转
|
||||
|
||||
[程序员代码面试指南](#)
|
||||
|
||||
@ -48,7 +48,7 @@ Return "student a am I"
|
||||
|
||||
将每个单词翻转,然后将整个字符串翻转。
|
||||
|
||||
# 两个字符串包含的字符是否完全相同
|
||||
# 4. 两个字符串包含的字符是否完全相同
|
||||
|
||||
[242. Valid Anagram (Easy)](https://leetcode.com/problems/valid-anagram/description/)
|
||||
|
||||
@ -79,7 +79,7 @@ public boolean isAnagram(String s, String t) {
|
||||
}
|
||||
```
|
||||
|
||||
# 计算一组字符集合可以组成的回文字符串的最大长度
|
||||
# 5. 计算一组字符集合可以组成的回文字符串的最大长度
|
||||
|
||||
[409. Longest Palindrome (Easy)](https://leetcode.com/problems/longest-palindrome/description/)
|
||||
|
||||
@ -110,7 +110,7 @@ public int longestPalindrome(String s) {
|
||||
}
|
||||
```
|
||||
|
||||
# 字符串同构
|
||||
# 6. 字符串同构
|
||||
|
||||
[205. Isomorphic Strings (Easy)](https://leetcode.com/problems/isomorphic-strings/description/)
|
||||
|
||||
@ -138,7 +138,7 @@ public boolean isIsomorphic(String s, String t) {
|
||||
}
|
||||
```
|
||||
|
||||
# 回文子字符串个数
|
||||
# 7. 回文子字符串个数
|
||||
|
||||
[647. Palindromic Substrings (Medium)](https://leetcode.com/problems/palindromic-substrings/description/)
|
||||
|
||||
@ -170,7 +170,7 @@ private void extendSubstrings(String s, int start, int end) {
|
||||
}
|
||||
```
|
||||
|
||||
# 判断一个整数是否是回文数
|
||||
# 8. 判断一个整数是否是回文数
|
||||
|
||||
[9. Palindrome Number (Easy)](https://leetcode.com/problems/palindrome-number/description/)
|
||||
|
||||
@ -195,7 +195,7 @@ public boolean isPalindrome(int x) {
|
||||
}
|
||||
```
|
||||
|
||||
# 统计二进制字符串中连续 1 和连续 0 数量相同的子字符串个数
|
||||
# 9. 统计二进制字符串中连续 1 和连续 0 数量相同的子字符串个数
|
||||
|
||||
[696. Count Binary Substrings (Easy)](https://leetcode.com/problems/count-binary-substrings/description/)
|
||||
|
||||
|
@ -1,14 +1,14 @@
|
||||
<!-- GFM-TOC -->
|
||||
* [用栈实现队列](#用栈实现队列)
|
||||
* [用队列实现栈](#用队列实现栈)
|
||||
* [最小值栈](#最小值栈)
|
||||
* [用栈实现括号匹配](#用栈实现括号匹配)
|
||||
* [数组中元素与下一个比它大的元素之间的距离](#数组中元素与下一个比它大的元素之间的距离)
|
||||
* [循环数组中比当前元素大的下一个元素](#循环数组中比当前元素大的下一个元素)
|
||||
* [1. 用栈实现队列](#1-用栈实现队列)
|
||||
* [2. 用队列实现栈](#2-用队列实现栈)
|
||||
* [3. 最小值栈](#3-最小值栈)
|
||||
* [4. 用栈实现括号匹配](#4-用栈实现括号匹配)
|
||||
* [5. 数组中元素与下一个比它大的元素之间的距离](#5-数组中元素与下一个比它大的元素之间的距离)
|
||||
* [6. 循环数组中比当前元素大的下一个元素](#6-循环数组中比当前元素大的下一个元素)
|
||||
<!-- GFM-TOC -->
|
||||
|
||||
|
||||
# 用栈实现队列
|
||||
# 1. 用栈实现队列
|
||||
|
||||
[232. Implement Queue using Stacks (Easy)](https://leetcode.com/problems/implement-queue-using-stacks/description/)
|
||||
|
||||
@ -48,7 +48,7 @@ class MyQueue {
|
||||
}
|
||||
```
|
||||
|
||||
# 用队列实现栈
|
||||
# 2. 用队列实现栈
|
||||
|
||||
[225. Implement Stack using Queues (Easy)](https://leetcode.com/problems/implement-stack-using-queues/description/)
|
||||
|
||||
@ -85,7 +85,7 @@ class MyStack {
|
||||
}
|
||||
```
|
||||
|
||||
# 最小值栈
|
||||
# 3. 最小值栈
|
||||
|
||||
[155. Min Stack (Easy)](https://leetcode.com/problems/min-stack/description/)
|
||||
|
||||
@ -126,7 +126,7 @@ class MinStack {
|
||||
|
||||
对于实现最小值队列问题,可以先将队列使用栈来实现,然后就将问题转换为最小值栈,这个问题出现在 编程之美:3.7。
|
||||
|
||||
# 用栈实现括号匹配
|
||||
# 4. 用栈实现括号匹配
|
||||
|
||||
[20. Valid Parentheses (Easy)](https://leetcode.com/problems/valid-parentheses/description/)
|
||||
|
||||
@ -159,7 +159,7 @@ public boolean isValid(String s) {
|
||||
}
|
||||
```
|
||||
|
||||
# 数组中元素与下一个比它大的元素之间的距离
|
||||
# 5. 数组中元素与下一个比它大的元素之间的距离
|
||||
|
||||
[739. Daily Temperatures (Medium)](https://leetcode.com/problems/daily-temperatures/description/)
|
||||
|
||||
@ -186,7 +186,7 @@ public int[] dailyTemperatures(int[] temperatures) {
|
||||
}
|
||||
```
|
||||
|
||||
# 循环数组中比当前元素大的下一个元素
|
||||
# 6. 循环数组中比当前元素大的下一个元素
|
||||
|
||||
[503. Next Greater Element II (Medium)](https://leetcode.com/problems/next-greater-element-ii/description/)
|
||||
|
||||
|
@ -1,40 +1,40 @@
|
||||
<!-- GFM-TOC -->
|
||||
* [递归](#递归)
|
||||
* [树的高度](#树的高度)
|
||||
* [平衡树](#平衡树)
|
||||
* [两节点的最长路径](#两节点的最长路径)
|
||||
* [翻转树](#翻转树)
|
||||
* [归并两棵树](#归并两棵树)
|
||||
* [判断路径和是否等于一个数](#判断路径和是否等于一个数)
|
||||
* [统计路径和等于一个数的路径数量](#统计路径和等于一个数的路径数量)
|
||||
* [子树](#子树)
|
||||
* [树的对称](#树的对称)
|
||||
* [最小路径](#最小路径)
|
||||
* [统计左叶子节点的和](#统计左叶子节点的和)
|
||||
* [相同节点值的最大路径长度](#相同节点值的最大路径长度)
|
||||
* [间隔遍历](#间隔遍历)
|
||||
* [找出二叉树中第二小的节点](#找出二叉树中第二小的节点)
|
||||
* [1. 树的高度](#1-树的高度)
|
||||
* [2. 平衡树](#2-平衡树)
|
||||
* [3. 两节点的最长路径](#3-两节点的最长路径)
|
||||
* [4. 翻转树](#4-翻转树)
|
||||
* [5. 归并两棵树](#5-归并两棵树)
|
||||
* [6. 判断路径和是否等于一个数](#6-判断路径和是否等于一个数)
|
||||
* [7. 统计路径和等于一个数的路径数量](#7-统计路径和等于一个数的路径数量)
|
||||
* [8. 子树](#8-子树)
|
||||
* [9. 树的对称](#9-树的对称)
|
||||
* [10. 最小路径](#10-最小路径)
|
||||
* [11. 统计左叶子节点的和](#11-统计左叶子节点的和)
|
||||
* [12. 相同节点值的最大路径长度](#12-相同节点值的最大路径长度)
|
||||
* [13. 间隔遍历](#13-间隔遍历)
|
||||
* [14. 找出二叉树中第二小的节点](#14-找出二叉树中第二小的节点)
|
||||
* [层次遍历](#层次遍历)
|
||||
* [一棵树每层节点的平均数](#一棵树每层节点的平均数)
|
||||
* [得到左下角的节点](#得到左下角的节点)
|
||||
* [1. 一棵树每层节点的平均数](#1-一棵树每层节点的平均数)
|
||||
* [2. 得到左下角的节点](#2-得到左下角的节点)
|
||||
* [前中后序遍历](#前中后序遍历)
|
||||
* [非递归实现二叉树的前序遍历](#非递归实现二叉树的前序遍历)
|
||||
* [非递归实现二叉树的后序遍历](#非递归实现二叉树的后序遍历)
|
||||
* [非递归实现二叉树的中序遍历](#非递归实现二叉树的中序遍历)
|
||||
* [1. 非递归实现二叉树的前序遍历](#1-非递归实现二叉树的前序遍历)
|
||||
* [2. 非递归实现二叉树的后序遍历](#2-非递归实现二叉树的后序遍历)
|
||||
* [3. 非递归实现二叉树的中序遍历](#3-非递归实现二叉树的中序遍历)
|
||||
* [BST](#bst)
|
||||
* [修剪二叉查找树](#修剪二叉查找树)
|
||||
* [寻找二叉查找树的第 k 个元素](#寻找二叉查找树的第-k-个元素)
|
||||
* [把二叉查找树每个节点的值都加上比它大的节点的值](#把二叉查找树每个节点的值都加上比它大的节点的值)
|
||||
* [二叉查找树的最近公共祖先](#二叉查找树的最近公共祖先)
|
||||
* [二叉树的最近公共祖先](#二叉树的最近公共祖先)
|
||||
* [从有序数组中构造二叉查找树](#从有序数组中构造二叉查找树)
|
||||
* [根据有序链表构造平衡的二叉查找树](#根据有序链表构造平衡的二叉查找树)
|
||||
* [在二叉查找树中寻找两个节点,使它们的和为一个给定值](#在二叉查找树中寻找两个节点,使它们的和为一个给定值)
|
||||
* [在二叉查找树中查找两个节点之差的最小绝对值](#在二叉查找树中查找两个节点之差的最小绝对值)
|
||||
* [寻找二叉查找树中出现次数最多的值](#寻找二叉查找树中出现次数最多的值)
|
||||
* [1. 修剪二叉查找树](#1-修剪二叉查找树)
|
||||
* [2. 寻找二叉查找树的第 k 个元素](#2-寻找二叉查找树的第-k-个元素)
|
||||
* [3. 把二叉查找树每个节点的值都加上比它大的节点的值](#3-把二叉查找树每个节点的值都加上比它大的节点的值)
|
||||
* [4. 二叉查找树的最近公共祖先](#4-二叉查找树的最近公共祖先)
|
||||
* [5. 二叉树的最近公共祖先](#5-二叉树的最近公共祖先)
|
||||
* [6. 从有序数组中构造二叉查找树](#6-从有序数组中构造二叉查找树)
|
||||
* [7. 根据有序链表构造平衡的二叉查找树](#7-根据有序链表构造平衡的二叉查找树)
|
||||
* [8. 在二叉查找树中寻找两个节点,使它们的和为一个给定值](#8-在二叉查找树中寻找两个节点,使它们的和为一个给定值)
|
||||
* [9. 在二叉查找树中查找两个节点之差的最小绝对值](#9-在二叉查找树中查找两个节点之差的最小绝对值)
|
||||
* [10. 寻找二叉查找树中出现次数最多的值](#10-寻找二叉查找树中出现次数最多的值)
|
||||
* [Trie](#trie)
|
||||
* [实现一个 Trie](#实现一个-trie)
|
||||
* [实现一个 Trie,用来求前缀和](#实现一个-trie,用来求前缀和)
|
||||
* [1. 实现一个 Trie](#1-实现一个-trie)
|
||||
* [2. 实现一个 Trie,用来求前缀和](#2-实现一个-trie,用来求前缀和)
|
||||
<!-- GFM-TOC -->
|
||||
|
||||
|
||||
@ -42,7 +42,7 @@
|
||||
|
||||
一棵树要么是空树,要么有两个指针,每个指针指向一棵树。树是一种递归结构,很多树的问题可以使用递归来处理。
|
||||
|
||||
## 树的高度
|
||||
## 1. 树的高度
|
||||
|
||||
[104. Maximum Depth of Binary Tree (Easy)](https://leetcode.com/problems/maximum-depth-of-binary-tree/description/)
|
||||
|
||||
@ -53,7 +53,7 @@ public int maxDepth(TreeNode root) {
|
||||
}
|
||||
```
|
||||
|
||||
## 平衡树
|
||||
## 2. 平衡树
|
||||
|
||||
[110. Balanced Binary Tree (Easy)](https://leetcode.com/problems/balanced-binary-tree/description/)
|
||||
|
||||
@ -84,7 +84,7 @@ public int maxDepth(TreeNode root) {
|
||||
}
|
||||
```
|
||||
|
||||
## 两节点的最长路径
|
||||
## 3. 两节点的最长路径
|
||||
|
||||
[543. Diameter of Binary Tree (Easy)](https://leetcode.com/problems/diameter-of-binary-tree/description/)
|
||||
|
||||
@ -117,7 +117,7 @@ private int depth(TreeNode root) {
|
||||
}
|
||||
```
|
||||
|
||||
## 翻转树
|
||||
## 4. 翻转树
|
||||
|
||||
[226. Invert Binary Tree (Easy)](https://leetcode.com/problems/invert-binary-tree/description/)
|
||||
|
||||
@ -131,7 +131,7 @@ public TreeNode invertTree(TreeNode root) {
|
||||
}
|
||||
```
|
||||
|
||||
## 归并两棵树
|
||||
## 5. 归并两棵树
|
||||
|
||||
[617. Merge Two Binary Trees (Easy)](https://leetcode.com/problems/merge-two-binary-trees/description/)
|
||||
|
||||
@ -164,7 +164,7 @@ public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
|
||||
}
|
||||
```
|
||||
|
||||
## 判断路径和是否等于一个数
|
||||
## 6. 判断路径和是否等于一个数
|
||||
|
||||
[Leetcdoe : 112. Path Sum (Easy)](https://leetcode.com/problems/path-sum/description/)
|
||||
|
||||
@ -192,7 +192,7 @@ public boolean hasPathSum(TreeNode root, int sum) {
|
||||
}
|
||||
```
|
||||
|
||||
## 统计路径和等于一个数的路径数量
|
||||
## 7. 统计路径和等于一个数的路径数量
|
||||
|
||||
[437. Path Sum III (Easy)](https://leetcode.com/problems/path-sum-iii/description/)
|
||||
|
||||
@ -232,7 +232,7 @@ private int pathSumStartWithRoot(TreeNode root, int sum) {
|
||||
}
|
||||
```
|
||||
|
||||
## 子树
|
||||
## 8. 子树
|
||||
|
||||
[572. Subtree of Another Tree (Easy)](https://leetcode.com/problems/subtree-of-another-tree/description/)
|
||||
|
||||
@ -283,7 +283,7 @@ private boolean isSubtreeWithRoot(TreeNode s, TreeNode t) {
|
||||
}
|
||||
```
|
||||
|
||||
## 树的对称
|
||||
## 9. 树的对称
|
||||
|
||||
[101. Symmetric Tree (Easy)](https://leetcode.com/problems/symmetric-tree/description/)
|
||||
|
||||
@ -309,7 +309,7 @@ private boolean isSymmetric(TreeNode t1, TreeNode t2) {
|
||||
}
|
||||
```
|
||||
|
||||
## 最小路径
|
||||
## 10. 最小路径
|
||||
|
||||
[111. Minimum Depth of Binary Tree (Easy)](https://leetcode.com/problems/minimum-depth-of-binary-tree/description/)
|
||||
|
||||
@ -325,7 +325,7 @@ public int minDepth(TreeNode root) {
|
||||
}
|
||||
```
|
||||
|
||||
## 统计左叶子节点的和
|
||||
## 11. 统计左叶子节点的和
|
||||
|
||||
[404. Sum of Left Leaves (Easy)](https://leetcode.com/problems/sum-of-left-leaves/description/)
|
||||
|
||||
@ -352,7 +352,7 @@ private boolean isLeaf(TreeNode node){
|
||||
}
|
||||
```
|
||||
|
||||
## 相同节点值的最大路径长度
|
||||
## 12. 相同节点值的最大路径长度
|
||||
|
||||
[687. Longest Univalue Path (Easy)](https://leetcode.com/problems/longest-univalue-path/)
|
||||
|
||||
@ -385,7 +385,7 @@ private int dfs(TreeNode root){
|
||||
}
|
||||
```
|
||||
|
||||
## 间隔遍历
|
||||
## 13. 间隔遍历
|
||||
|
||||
[337. House Robber III (Medium)](https://leetcode.com/problems/house-robber-iii/description/)
|
||||
|
||||
@ -409,7 +409,7 @@ public int rob(TreeNode root) {
|
||||
}
|
||||
```
|
||||
|
||||
## 找出二叉树中第二小的节点
|
||||
## 14. 找出二叉树中第二小的节点
|
||||
|
||||
[671. Second Minimum Node In a Binary Tree (Easy)](https://leetcode.com/problems/second-minimum-node-in-a-binary-tree/description/)
|
||||
|
||||
@ -444,7 +444,7 @@ public int findSecondMinimumValue(TreeNode root) {
|
||||
|
||||
使用 BFS 进行层次遍历。不需要使用两个队列来分别存储当前层的节点和下一层的节点,因为在开始遍历一层的节点时,当前队列中的节点数就是当前层的节点数,只要控制遍历这么多节点数,就能保证这次遍历的都是当前层的节点。
|
||||
|
||||
## 一棵树每层节点的平均数
|
||||
## 1. 一棵树每层节点的平均数
|
||||
|
||||
[637. Average of Levels in Binary Tree (Easy)](https://leetcode.com/problems/average-of-levels-in-binary-tree/description/)
|
||||
|
||||
@ -469,7 +469,7 @@ public List<Double> averageOfLevels(TreeNode root) {
|
||||
}
|
||||
```
|
||||
|
||||
## 得到左下角的节点
|
||||
## 2. 得到左下角的节点
|
||||
|
||||
[513. Find Bottom Left Tree Value (Easy)](https://leetcode.com/problems/find-bottom-left-tree-value/description/)
|
||||
|
||||
@ -550,7 +550,7 @@ void dfs(TreeNode root) {
|
||||
}
|
||||
```
|
||||
|
||||
## 非递归实现二叉树的前序遍历
|
||||
## 1. 非递归实现二叉树的前序遍历
|
||||
|
||||
[144. Binary Tree Preorder Traversal (Medium)](https://leetcode.com/problems/binary-tree-preorder-traversal/description/)
|
||||
|
||||
@ -570,7 +570,7 @@ public List<Integer> preorderTraversal(TreeNode root) {
|
||||
}
|
||||
```
|
||||
|
||||
## 非递归实现二叉树的后序遍历
|
||||
## 2. 非递归实现二叉树的后序遍历
|
||||
|
||||
[145. Binary Tree Postorder Traversal (Medium)](https://leetcode.com/problems/binary-tree-postorder-traversal/description/)
|
||||
|
||||
@ -593,7 +593,7 @@ public List<Integer> postorderTraversal(TreeNode root) {
|
||||
}
|
||||
```
|
||||
|
||||
## 非递归实现二叉树的中序遍历
|
||||
## 3. 非递归实现二叉树的中序遍历
|
||||
|
||||
[94. Binary Tree Inorder Traversal (Medium)](https://leetcode.com/problems/binary-tree-inorder-traversal/description/)
|
||||
|
||||
@ -622,7 +622,7 @@ public List<Integer> inorderTraversal(TreeNode root) {
|
||||
|
||||
二叉查找树中序遍历有序。
|
||||
|
||||
## 修剪二叉查找树
|
||||
## 1. 修剪二叉查找树
|
||||
|
||||
[669. Trim a Binary Search Tree (Easy)](https://leetcode.com/problems/trim-a-binary-search-tree/description/)
|
||||
|
||||
@ -662,7 +662,7 @@ public TreeNode trimBST(TreeNode root, int L, int R) {
|
||||
}
|
||||
```
|
||||
|
||||
## 寻找二叉查找树的第 k 个元素
|
||||
## 2. 寻找二叉查找树的第 k 个元素
|
||||
|
||||
[230. Kth Smallest Element in a BST (Medium)](https://leetcode.com/problems/kth-smallest-element-in-a-bst/description/)
|
||||
|
||||
@ -706,7 +706,7 @@ private int count(TreeNode node) {
|
||||
}
|
||||
```
|
||||
|
||||
## 把二叉查找树每个节点的值都加上比它大的节点的值
|
||||
## 3. 把二叉查找树每个节点的值都加上比它大的节点的值
|
||||
|
||||
[Convert BST to Greater Tree (Easy)](https://leetcode.com/problems/convert-bst-to-greater-tree/description/)
|
||||
|
||||
@ -743,7 +743,7 @@ private void traver(TreeNode node) {
|
||||
}
|
||||
```
|
||||
|
||||
## 二叉查找树的最近公共祖先
|
||||
## 4. 二叉查找树的最近公共祖先
|
||||
|
||||
[235. Lowest Common Ancestor of a Binary Search Tree (Easy)](https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/description/)
|
||||
|
||||
@ -767,7 +767,7 @@ public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
|
||||
}
|
||||
```
|
||||
|
||||
## 二叉树的最近公共祖先
|
||||
## 5. 二叉树的最近公共祖先
|
||||
|
||||
[236. Lowest Common Ancestor of a Binary Tree (Medium) ](https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/description/)
|
||||
|
||||
@ -792,7 +792,7 @@ public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
|
||||
}
|
||||
```
|
||||
|
||||
## 从有序数组中构造二叉查找树
|
||||
## 6. 从有序数组中构造二叉查找树
|
||||
|
||||
[108. Convert Sorted Array to Binary Search Tree (Easy)](https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/description/)
|
||||
|
||||
@ -811,7 +811,7 @@ private TreeNode toBST(int[] nums, int sIdx, int eIdx){
|
||||
}
|
||||
```
|
||||
|
||||
## 根据有序链表构造平衡的二叉查找树
|
||||
## 7. 根据有序链表构造平衡的二叉查找树
|
||||
|
||||
[109. Convert Sorted List to Binary Search Tree (Medium)](https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/description/)
|
||||
|
||||
@ -852,7 +852,7 @@ private ListNode preMid(ListNode head) {
|
||||
}
|
||||
```
|
||||
|
||||
## 在二叉查找树中寻找两个节点,使它们的和为一个给定值
|
||||
## 8. 在二叉查找树中寻找两个节点,使它们的和为一个给定值
|
||||
|
||||
[653. Two Sum IV - Input is a BST (Easy)](https://leetcode.com/problems/two-sum-iv-input-is-a-bst/description/)
|
||||
|
||||
@ -896,7 +896,7 @@ private void inOrder(TreeNode root, List<Integer> nums) {
|
||||
}
|
||||
```
|
||||
|
||||
## 在二叉查找树中查找两个节点之差的最小绝对值
|
||||
## 9. 在二叉查找树中查找两个节点之差的最小绝对值
|
||||
|
||||
[530. Minimum Absolute Difference in BST (Easy)](https://leetcode.com/problems/minimum-absolute-difference-in-bst/description/)
|
||||
|
||||
@ -934,7 +934,7 @@ private void inOrder(TreeNode node) {
|
||||
}
|
||||
```
|
||||
|
||||
## 寻找二叉查找树中出现次数最多的值
|
||||
## 10. 寻找二叉查找树中出现次数最多的值
|
||||
|
||||
[501. Find Mode in Binary Search Tree (Easy)](https://leetcode.com/problems/find-mode-in-binary-search-tree/description/)
|
||||
|
||||
@ -991,7 +991,7 @@ private void inOrder(TreeNode node, List<Integer> nums) {
|
||||
|
||||
Trie,又称前缀树或字典树,用于判断字符串是否存在或者是否具有某种字符串前缀。
|
||||
|
||||
## 实现一个 Trie
|
||||
## 1. 实现一个 Trie
|
||||
|
||||
[208. Implement Trie (Prefix Tree) (Medium)](https://leetcode.com/problems/implement-trie-prefix-tree/description/)
|
||||
|
||||
@ -1053,7 +1053,7 @@ class Trie {
|
||||
}
|
||||
```
|
||||
|
||||
## 实现一个 Trie,用来求前缀和
|
||||
## 2. 实现一个 Trie,用来求前缀和
|
||||
|
||||
[677. Map Sum Pairs (Medium)](https://leetcode.com/problems/map-sum-pairs/description/)
|
||||
|
||||
|
@ -1,20 +1,20 @@
|
||||
<!-- GFM-TOC -->
|
||||
* [找出两个链表的交点](#找出两个链表的交点)
|
||||
* [链表反转](#链表反转)
|
||||
* [归并两个有序的链表](#归并两个有序的链表)
|
||||
* [从有序链表中删除重复节点](#从有序链表中删除重复节点)
|
||||
* [删除链表的倒数第 n 个节点](#删除链表的倒数第-n-个节点)
|
||||
* [交换链表中的相邻结点](#交换链表中的相邻结点)
|
||||
* [链表求和](#链表求和)
|
||||
* [回文链表](#回文链表)
|
||||
* [分隔链表](#分隔链表)
|
||||
* [链表元素按奇偶聚集](#链表元素按奇偶聚集)
|
||||
* [1. 找出两个链表的交点](#1-找出两个链表的交点)
|
||||
* [2. 链表反转](#2-链表反转)
|
||||
* [3. 归并两个有序的链表](#3-归并两个有序的链表)
|
||||
* [4. 从有序链表中删除重复节点](#4-从有序链表中删除重复节点)
|
||||
* [5. 删除链表的倒数第 n 个节点](#5-删除链表的倒数第-n-个节点)
|
||||
* [6. 交换链表中的相邻结点](#6-交换链表中的相邻结点)
|
||||
* [7. 链表求和](#7-链表求和)
|
||||
* [8. 回文链表](#8-回文链表)
|
||||
* [9. 分隔链表](#9-分隔链表)
|
||||
* [10. 链表元素按奇偶聚集](#10-链表元素按奇偶聚集)
|
||||
<!-- GFM-TOC -->
|
||||
|
||||
|
||||
链表是空节点,或者有一个值和一个指向下一个链表的指针,因此很多链表问题可以用递归来处理。
|
||||
|
||||
# 找出两个链表的交点
|
||||
# 1. 找出两个链表的交点
|
||||
|
||||
[160. Intersection of Two Linked Lists (Easy)](https://leetcode.com/problems/intersection-of-two-linked-lists/description/)
|
||||
|
||||
@ -48,7 +48,7 @@ public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
|
||||
- 把第一个链表的结尾连接到第二个链表的开头,看第二个链表是否存在环;
|
||||
- 或者直接比较两个链表的最后一个节点是否相同。
|
||||
|
||||
# 链表反转
|
||||
# 2. 链表反转
|
||||
|
||||
[206. Reverse Linked List (Easy)](https://leetcode.com/problems/reverse-linked-list/description/)
|
||||
|
||||
@ -82,7 +82,7 @@ public ListNode reverseList(ListNode head) {
|
||||
}
|
||||
```
|
||||
|
||||
# 归并两个有序的链表
|
||||
# 3. 归并两个有序的链表
|
||||
|
||||
[21. Merge Two Sorted Lists (Easy)](https://leetcode.com/problems/merge-two-sorted-lists/description/)
|
||||
|
||||
@ -100,7 +100,7 @@ public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
|
||||
}
|
||||
```
|
||||
|
||||
# 从有序链表中删除重复节点
|
||||
# 4. 从有序链表中删除重复节点
|
||||
|
||||
[83. Remove Duplicates from Sorted List (Easy)](https://leetcode.com/problems/remove-duplicates-from-sorted-list/description/)
|
||||
|
||||
@ -117,7 +117,7 @@ public ListNode deleteDuplicates(ListNode head) {
|
||||
}
|
||||
```
|
||||
|
||||
# 删除链表的倒数第 n 个节点
|
||||
# 5. 删除链表的倒数第 n 个节点
|
||||
|
||||
[19. Remove Nth Node From End of List (Medium)](https://leetcode.com/problems/remove-nth-node-from-end-of-list/description/)
|
||||
|
||||
@ -143,7 +143,7 @@ public ListNode removeNthFromEnd(ListNode head, int n) {
|
||||
}
|
||||
```
|
||||
|
||||
# 交换链表中的相邻结点
|
||||
# 6. 交换链表中的相邻结点
|
||||
|
||||
[24. Swap Nodes in Pairs (Medium)](https://leetcode.com/problems/swap-nodes-in-pairs/description/)
|
||||
|
||||
@ -171,7 +171,7 @@ public ListNode swapPairs(ListNode head) {
|
||||
}
|
||||
```
|
||||
|
||||
# 链表求和
|
||||
# 7. 链表求和
|
||||
|
||||
[445. Add Two Numbers II (Medium)](https://leetcode.com/problems/add-two-numbers-ii/description/)
|
||||
|
||||
@ -210,7 +210,7 @@ private Stack<Integer> buildStack(ListNode l) {
|
||||
}
|
||||
```
|
||||
|
||||
# 回文链表
|
||||
# 8. 回文链表
|
||||
|
||||
[234. Palindrome Linked List (Easy)](https://leetcode.com/problems/palindrome-linked-list/description/)
|
||||
|
||||
@ -259,7 +259,7 @@ private boolean isEqual(ListNode l1, ListNode l2) {
|
||||
}
|
||||
```
|
||||
|
||||
# 分隔链表
|
||||
# 9. 分隔链表
|
||||
|
||||
[725. Split Linked List in Parts(Medium)](https://leetcode.com/problems/split-linked-list-in-parts/description/)
|
||||
|
||||
@ -299,7 +299,7 @@ public ListNode[] splitListToParts(ListNode root, int k) {
|
||||
}
|
||||
```
|
||||
|
||||
# 链表元素按奇偶聚集
|
||||
# 10. 链表元素按奇偶聚集
|
||||
|
||||
[328. Odd Even Linked List (Medium)](https://leetcode.com/problems/odd-even-linked-list/description/)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user