auto commit
This commit is contained in:
parent
39e10a02d9
commit
bb098b5250
@ -30,8 +30,14 @@ Output: index1=1, index2=2
|
|||||||
- 如果 sum > target,移动较大的元素,使 sum 变小一些;
|
- 如果 sum > target,移动较大的元素,使 sum 变小一些;
|
||||||
- 如果 sum < target,移动较小的元素,使 sum 变大一些。
|
- 如果 sum < target,移动较小的元素,使 sum 变大一些。
|
||||||
|
|
||||||
|
数组中的元素最多遍历一次,时间复杂度为 O(N)。额外只使用了两个变量,空间复杂度为
|
||||||
|
O(1)。
|
||||||
|
|
||||||
|
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/437cb54c-5970-4ba9-b2ef-2541f7d6c81e.gif" width="200px"> </div><br>
|
||||||
|
|
||||||
```java
|
```java
|
||||||
public int[] twoSum(int[] numbers, int target) {
|
public int[] twoSum(int[] numbers, int target) {
|
||||||
|
if (numbers == null) return null;
|
||||||
int i = 0, j = numbers.length - 1;
|
int i = 0, j = numbers.length - 1;
|
||||||
while (i < j) {
|
while (i < j) {
|
||||||
int sum = numbers[i] + numbers[j];
|
int sum = numbers[i] + numbers[j];
|
||||||
@ -49,7 +55,7 @@ public int[] twoSum(int[] numbers, int target) {
|
|||||||
|
|
||||||
# 2. 两数平方和
|
# 2. 两数平方和
|
||||||
|
|
||||||
633. Sum of Square Numbers (Easy)
|
633\. Sum of Square Numbers (Easy)
|
||||||
|
|
||||||
[Leetcode](https://leetcode.com/problems/sum-of-square-numbers/description/) / [力扣](https://leetcode-cn.com/problems/sum-of-square-numbers/description/)
|
[Leetcode](https://leetcode.com/problems/sum-of-square-numbers/description/) / [力扣](https://leetcode-cn.com/problems/sum-of-square-numbers/description/)
|
||||||
|
|
||||||
@ -80,7 +86,7 @@ public boolean judgeSquareSum(int c) {
|
|||||||
|
|
||||||
# 3. 反转字符串中的元音字符
|
# 3. 反转字符串中的元音字符
|
||||||
|
|
||||||
345. Reverse Vowels of a String (Easy)
|
345\. Reverse Vowels of a String (Easy)
|
||||||
|
|
||||||
[Leetcode](https://leetcode.com/problems/reverse-vowels-of-a-string/description/) / [力扣](https://leetcode-cn.com/problems/reverse-vowels-of-a-string/description/)
|
[Leetcode](https://leetcode.com/problems/reverse-vowels-of-a-string/description/) / [力扣](https://leetcode-cn.com/problems/reverse-vowels-of-a-string/description/)
|
||||||
|
|
||||||
@ -115,7 +121,7 @@ public String reverseVowels(String s) {
|
|||||||
|
|
||||||
# 4. 回文字符串
|
# 4. 回文字符串
|
||||||
|
|
||||||
680. Valid Palindrome II (Easy)
|
680\. Valid Palindrome II (Easy)
|
||||||
|
|
||||||
[Leetcode](https://leetcode.com/problems/valid-palindrome-ii/description/) / [力扣](https://leetcode-cn.com/problems/valid-palindrome-ii/description/)
|
[Leetcode](https://leetcode.com/problems/valid-palindrome-ii/description/) / [力扣](https://leetcode-cn.com/problems/valid-palindrome-ii/description/)
|
||||||
|
|
||||||
@ -149,7 +155,7 @@ private boolean isPalindrome(String s, int i, int j) {
|
|||||||
|
|
||||||
# 5. 归并两个有序数组
|
# 5. 归并两个有序数组
|
||||||
|
|
||||||
88. Merge Sorted Array (Easy)
|
88\. Merge Sorted Array (Easy)
|
||||||
|
|
||||||
[Leetcode](https://leetcode.com/problems/merge-sorted-array/description/) / [力扣](https://leetcode-cn.com/problems/merge-sorted-array/description/)
|
[Leetcode](https://leetcode.com/problems/merge-sorted-array/description/) / [力扣](https://leetcode-cn.com/problems/merge-sorted-array/description/)
|
||||||
|
|
||||||
@ -185,7 +191,7 @@ public void merge(int[] nums1, int m, int[] nums2, int n) {
|
|||||||
|
|
||||||
# 6. 判断链表是否存在环
|
# 6. 判断链表是否存在环
|
||||||
|
|
||||||
141. Linked List Cycle (Easy)
|
141\. Linked List Cycle (Easy)
|
||||||
|
|
||||||
[Leetcode](https://leetcode.com/problems/linked-list-cycle/description/) / [力扣](https://leetcode-cn.com/problems/linked-list-cycle/description/)
|
[Leetcode](https://leetcode.com/problems/linked-list-cycle/description/) / [力扣](https://leetcode-cn.com/problems/linked-list-cycle/description/)
|
||||||
|
|
||||||
@ -210,7 +216,7 @@ public boolean hasCycle(ListNode head) {
|
|||||||
|
|
||||||
# 7. 最长子序列
|
# 7. 最长子序列
|
||||||
|
|
||||||
524. Longest Word in Dictionary through Deleting (Medium)
|
524\. Longest Word in Dictionary through Deleting (Medium)
|
||||||
|
|
||||||
[Leetcode](https://leetcode.com/problems/longest-word-in-dictionary-through-deleting/description/) / [力扣](https://leetcode-cn.com/problems/longest-word-in-dictionary-through-deleting/description/)
|
[Leetcode](https://leetcode.com/problems/longest-word-in-dictionary-through-deleting/description/) / [力扣](https://leetcode-cn.com/problems/longest-word-in-dictionary-through-deleting/description/)
|
||||||
|
|
||||||
|
@ -27,17 +27,17 @@
|
|||||||
|
|
||||||
**.** 是元字符,表示它有特殊的含义,而不是字符本身的含义。如果需要匹配 . ,那么要用 \ 进行转义,即在 . 前面加上 \ 。
|
**.** 是元字符,表示它有特殊的含义,而不是字符本身的含义。如果需要匹配 . ,那么要用 \ 进行转义,即在 . 前面加上 \ 。
|
||||||
|
|
||||||
正则表达式一般是区分大小写的,但是也有些实现是不区分。
|
正则表达式一般是区分大小写的,但也有些实现不区分。
|
||||||
|
|
||||||
**正则表达式**
|
**正则表达式**
|
||||||
|
|
||||||
```
|
```
|
||||||
nam.
|
C.C2018
|
||||||
```
|
```
|
||||||
|
|
||||||
**匹配结果**
|
**匹配结果**
|
||||||
|
|
||||||
My **name** is Zheng.
|
My name is **CyC2018** .
|
||||||
|
|
||||||
# 三、匹配一组字符
|
# 三、匹配一组字符
|
||||||
|
|
||||||
@ -82,7 +82,7 @@ abc[^0-9]
|
|||||||
|
|
||||||
\r\n\r\n 可以匹配 Windows 下的空白行,因为它匹配两个连续的行尾标签,而这正是两条记录之间的空白行;
|
\r\n\r\n 可以匹配 Windows 下的空白行,因为它匹配两个连续的行尾标签,而这正是两条记录之间的空白行;
|
||||||
|
|
||||||
## 匹配特定的字符类别
|
## 匹配特定的字符
|
||||||
|
|
||||||
### 1. 数字元字符
|
### 1. 数字元字符
|
||||||
|
|
||||||
@ -105,13 +105,13 @@ abc[^0-9]
|
|||||||
| \s | 任何一个空白字符,等价于 [\f\n\r\t\v] |
|
| \s | 任何一个空白字符,等价于 [\f\n\r\t\v] |
|
||||||
| \S | 对 \s 取非 |
|
| \S | 对 \s 取非 |
|
||||||
|
|
||||||
\x 匹配十六进制字符,\0 匹配八进制,例如 \x0A 对应 ASCII 字符 10,等价于 \n。
|
\x 匹配十六进制字符,\0 匹配八进制,例如 \xA 对应值为 10 的 ASCII 字符 ,即 \n。
|
||||||
|
|
||||||
# 五、重复匹配
|
# 五、重复匹配
|
||||||
|
|
||||||
- **\+** 匹配 1 个或者多个字符
|
- **\+** 匹配 1 个或者多个字符
|
||||||
- **\** * 匹配 0 个或者多个
|
- **\** * 匹配 0 个或者多个字符
|
||||||
- **?** 匹配 0 个或者 1 个
|
- **?** 匹配 0 个或者 1 个字符
|
||||||
|
|
||||||
**应用**
|
**应用**
|
||||||
|
|
||||||
@ -141,12 +141,12 @@ abc[^0-9]
|
|||||||
a.+c
|
a.+c
|
||||||
```
|
```
|
||||||
|
|
||||||
由于 + 是贪婪型的,因此 .+ 会匹配更可能多的内容,所以会把整个 abcabcabc 文本都匹配,而不是只匹配前面的 abc 文本。用懒惰型可以实现匹配前面的。
|
|
||||||
|
|
||||||
**匹配结果**
|
**匹配结果**
|
||||||
|
|
||||||
**abcabcabc**
|
**abcabcabc**
|
||||||
|
|
||||||
|
由于 + 是贪婪型的,因此 .+ 会匹配更可能多的内容,所以会把整个 abcabcabc 文本都匹配,而不是只匹配前面的 abc 文本。用懒惰型可以实现匹配前面的。
|
||||||
|
|
||||||
# 六、位置匹配
|
# 六、位置匹配
|
||||||
|
|
||||||
## 单词边界
|
## 单词边界
|
||||||
@ -327,7 +327,9 @@ aBCd
|
|||||||
|
|
||||||
# 九、前后查找
|
# 九、前后查找
|
||||||
|
|
||||||
前后查找规定了匹配的内容首尾应该匹配的内容,但是又不包含首尾匹配的内容。向前查找用 **?=** 来定义,它规定了尾部匹配的内容,这个匹配的内容在 ?= 之后定义。所谓向前查找,就是规定了一个匹配的内容,然后以这个内容为尾部向前面查找需要匹配的内容。向后匹配用 ?<= 定义(注: javaScript 不支持向后匹配, java 对其支持也不完善)。
|
前后查找规定了匹配的内容首尾应该匹配的内容,但是又不包含首尾匹配的内容。
|
||||||
|
|
||||||
|
向前查找使用 **?=** 定义,它规定了尾部匹配的内容,这个匹配的内容在 ?= 之后定义。所谓向前查找,就是规定了一个匹配的内容,然后以这个内容为尾部向前面查找需要匹配的内容。向后匹配用 ?<= 定义(注: JavaScript 不支持向后匹配,Java 对其支持也不完善)。
|
||||||
|
|
||||||
**应用**
|
**应用**
|
||||||
|
|
||||||
@ -349,7 +351,7 @@ aBCd
|
|||||||
|
|
||||||
## 回溯引用条件
|
## 回溯引用条件
|
||||||
|
|
||||||
条件判断为某个子表达式是否匹配,如果匹配则需要继续匹配条件表达式后面的内容。
|
条件为某个子表达式是否匹配,如果匹配则需要继续匹配条件表达式后面的内容。
|
||||||
|
|
||||||
**正则表达式**
|
**正则表达式**
|
||||||
|
|
||||||
|
BIN
docs/pics/437cb54c-5970-4ba9-b2ef-2541f7d6c81e.gif
Normal file
BIN
docs/pics/437cb54c-5970-4ba9-b2ef-2541f7d6c81e.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
@ -30,8 +30,14 @@ Output: index1=1, index2=2
|
|||||||
- 如果 sum > target,移动较大的元素,使 sum 变小一些;
|
- 如果 sum > target,移动较大的元素,使 sum 变小一些;
|
||||||
- 如果 sum < target,移动较小的元素,使 sum 变大一些。
|
- 如果 sum < target,移动较小的元素,使 sum 变大一些。
|
||||||
|
|
||||||
|
数组中的元素最多遍历一次,时间复杂度为 O(N)。额外只使用了两个变量,空间复杂度为
|
||||||
|
O(1)。
|
||||||
|
|
||||||
|
<div align="center"> <img src="pics/437cb54c-5970-4ba9-b2ef-2541f7d6c81e.gif" width="200px"> </div><br>
|
||||||
|
|
||||||
```java
|
```java
|
||||||
public int[] twoSum(int[] numbers, int target) {
|
public int[] twoSum(int[] numbers, int target) {
|
||||||
|
if (numbers == null) return null;
|
||||||
int i = 0, j = numbers.length - 1;
|
int i = 0, j = numbers.length - 1;
|
||||||
while (i < j) {
|
while (i < j) {
|
||||||
int sum = numbers[i] + numbers[j];
|
int sum = numbers[i] + numbers[j];
|
||||||
@ -49,7 +55,7 @@ public int[] twoSum(int[] numbers, int target) {
|
|||||||
|
|
||||||
# 2. 两数平方和
|
# 2. 两数平方和
|
||||||
|
|
||||||
633. Sum of Square Numbers (Easy)
|
633\. Sum of Square Numbers (Easy)
|
||||||
|
|
||||||
[Leetcode](https://leetcode.com/problems/sum-of-square-numbers/description/) / [力扣](https://leetcode-cn.com/problems/sum-of-square-numbers/description/)
|
[Leetcode](https://leetcode.com/problems/sum-of-square-numbers/description/) / [力扣](https://leetcode-cn.com/problems/sum-of-square-numbers/description/)
|
||||||
|
|
||||||
@ -80,7 +86,7 @@ public boolean judgeSquareSum(int c) {
|
|||||||
|
|
||||||
# 3. 反转字符串中的元音字符
|
# 3. 反转字符串中的元音字符
|
||||||
|
|
||||||
345. Reverse Vowels of a String (Easy)
|
345\. Reverse Vowels of a String (Easy)
|
||||||
|
|
||||||
[Leetcode](https://leetcode.com/problems/reverse-vowels-of-a-string/description/) / [力扣](https://leetcode-cn.com/problems/reverse-vowels-of-a-string/description/)
|
[Leetcode](https://leetcode.com/problems/reverse-vowels-of-a-string/description/) / [力扣](https://leetcode-cn.com/problems/reverse-vowels-of-a-string/description/)
|
||||||
|
|
||||||
@ -115,7 +121,7 @@ public String reverseVowels(String s) {
|
|||||||
|
|
||||||
# 4. 回文字符串
|
# 4. 回文字符串
|
||||||
|
|
||||||
680. Valid Palindrome II (Easy)
|
680\. Valid Palindrome II (Easy)
|
||||||
|
|
||||||
[Leetcode](https://leetcode.com/problems/valid-palindrome-ii/description/) / [力扣](https://leetcode-cn.com/problems/valid-palindrome-ii/description/)
|
[Leetcode](https://leetcode.com/problems/valid-palindrome-ii/description/) / [力扣](https://leetcode-cn.com/problems/valid-palindrome-ii/description/)
|
||||||
|
|
||||||
@ -149,7 +155,7 @@ private boolean isPalindrome(String s, int i, int j) {
|
|||||||
|
|
||||||
# 5. 归并两个有序数组
|
# 5. 归并两个有序数组
|
||||||
|
|
||||||
88. Merge Sorted Array (Easy)
|
88\. Merge Sorted Array (Easy)
|
||||||
|
|
||||||
[Leetcode](https://leetcode.com/problems/merge-sorted-array/description/) / [力扣](https://leetcode-cn.com/problems/merge-sorted-array/description/)
|
[Leetcode](https://leetcode.com/problems/merge-sorted-array/description/) / [力扣](https://leetcode-cn.com/problems/merge-sorted-array/description/)
|
||||||
|
|
||||||
@ -185,7 +191,7 @@ public void merge(int[] nums1, int m, int[] nums2, int n) {
|
|||||||
|
|
||||||
# 6. 判断链表是否存在环
|
# 6. 判断链表是否存在环
|
||||||
|
|
||||||
141. Linked List Cycle (Easy)
|
141\. Linked List Cycle (Easy)
|
||||||
|
|
||||||
[Leetcode](https://leetcode.com/problems/linked-list-cycle/description/) / [力扣](https://leetcode-cn.com/problems/linked-list-cycle/description/)
|
[Leetcode](https://leetcode.com/problems/linked-list-cycle/description/) / [力扣](https://leetcode-cn.com/problems/linked-list-cycle/description/)
|
||||||
|
|
||||||
@ -210,7 +216,7 @@ public boolean hasCycle(ListNode head) {
|
|||||||
|
|
||||||
# 7. 最长子序列
|
# 7. 最长子序列
|
||||||
|
|
||||||
524. Longest Word in Dictionary through Deleting (Medium)
|
524\. Longest Word in Dictionary through Deleting (Medium)
|
||||||
|
|
||||||
[Leetcode](https://leetcode.com/problems/longest-word-in-dictionary-through-deleting/description/) / [力扣](https://leetcode-cn.com/problems/longest-word-in-dictionary-through-deleting/description/)
|
[Leetcode](https://leetcode.com/problems/longest-word-in-dictionary-through-deleting/description/) / [力扣](https://leetcode-cn.com/problems/longest-word-in-dictionary-through-deleting/description/)
|
||||||
|
|
||||||
|
BIN
notes/pics/437cb54c-5970-4ba9-b2ef-2541f7d6c81e.gif
Normal file
BIN
notes/pics/437cb54c-5970-4ba9-b2ef-2541f7d6c81e.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
@ -27,17 +27,17 @@
|
|||||||
|
|
||||||
**.** 是元字符,表示它有特殊的含义,而不是字符本身的含义。如果需要匹配 . ,那么要用 \ 进行转义,即在 . 前面加上 \ 。
|
**.** 是元字符,表示它有特殊的含义,而不是字符本身的含义。如果需要匹配 . ,那么要用 \ 进行转义,即在 . 前面加上 \ 。
|
||||||
|
|
||||||
正则表达式一般是区分大小写的,但是也有些实现是不区分。
|
正则表达式一般是区分大小写的,但也有些实现不区分。
|
||||||
|
|
||||||
**正则表达式**
|
**正则表达式**
|
||||||
|
|
||||||
```
|
```
|
||||||
nam.
|
C.C2018
|
||||||
```
|
```
|
||||||
|
|
||||||
**匹配结果**
|
**匹配结果**
|
||||||
|
|
||||||
My **name** is Zheng.
|
My name is **CyC2018** .
|
||||||
|
|
||||||
# 三、匹配一组字符
|
# 三、匹配一组字符
|
||||||
|
|
||||||
@ -82,7 +82,7 @@ abc[^0-9]
|
|||||||
|
|
||||||
\r\n\r\n 可以匹配 Windows 下的空白行,因为它匹配两个连续的行尾标签,而这正是两条记录之间的空白行;
|
\r\n\r\n 可以匹配 Windows 下的空白行,因为它匹配两个连续的行尾标签,而这正是两条记录之间的空白行;
|
||||||
|
|
||||||
## 匹配特定的字符类别
|
## 匹配特定的字符
|
||||||
|
|
||||||
### 1. 数字元字符
|
### 1. 数字元字符
|
||||||
|
|
||||||
@ -105,13 +105,13 @@ abc[^0-9]
|
|||||||
| \s | 任何一个空白字符,等价于 [\f\n\r\t\v] |
|
| \s | 任何一个空白字符,等价于 [\f\n\r\t\v] |
|
||||||
| \S | 对 \s 取非 |
|
| \S | 对 \s 取非 |
|
||||||
|
|
||||||
\x 匹配十六进制字符,\0 匹配八进制,例如 \x0A 对应 ASCII 字符 10,等价于 \n。
|
\x 匹配十六进制字符,\0 匹配八进制,例如 \xA 对应值为 10 的 ASCII 字符 ,即 \n。
|
||||||
|
|
||||||
# 五、重复匹配
|
# 五、重复匹配
|
||||||
|
|
||||||
- **\+** 匹配 1 个或者多个字符
|
- **\+** 匹配 1 个或者多个字符
|
||||||
- **\** * 匹配 0 个或者多个
|
- **\** * 匹配 0 个或者多个字符
|
||||||
- **?** 匹配 0 个或者 1 个
|
- **?** 匹配 0 个或者 1 个字符
|
||||||
|
|
||||||
**应用**
|
**应用**
|
||||||
|
|
||||||
@ -141,12 +141,12 @@ abc[^0-9]
|
|||||||
a.+c
|
a.+c
|
||||||
```
|
```
|
||||||
|
|
||||||
由于 + 是贪婪型的,因此 .+ 会匹配更可能多的内容,所以会把整个 abcabcabc 文本都匹配,而不是只匹配前面的 abc 文本。用懒惰型可以实现匹配前面的。
|
|
||||||
|
|
||||||
**匹配结果**
|
**匹配结果**
|
||||||
|
|
||||||
**abcabcabc**
|
**abcabcabc**
|
||||||
|
|
||||||
|
由于 + 是贪婪型的,因此 .+ 会匹配更可能多的内容,所以会把整个 abcabcabc 文本都匹配,而不是只匹配前面的 abc 文本。用懒惰型可以实现匹配前面的。
|
||||||
|
|
||||||
# 六、位置匹配
|
# 六、位置匹配
|
||||||
|
|
||||||
## 单词边界
|
## 单词边界
|
||||||
@ -327,7 +327,9 @@ aBCd
|
|||||||
|
|
||||||
# 九、前后查找
|
# 九、前后查找
|
||||||
|
|
||||||
前后查找规定了匹配的内容首尾应该匹配的内容,但是又不包含首尾匹配的内容。向前查找用 **?=** 来定义,它规定了尾部匹配的内容,这个匹配的内容在 ?= 之后定义。所谓向前查找,就是规定了一个匹配的内容,然后以这个内容为尾部向前面查找需要匹配的内容。向后匹配用 ?<= 定义(注: javaScript 不支持向后匹配, java 对其支持也不完善)。
|
前后查找规定了匹配的内容首尾应该匹配的内容,但是又不包含首尾匹配的内容。
|
||||||
|
|
||||||
|
向前查找使用 **?=** 定义,它规定了尾部匹配的内容,这个匹配的内容在 ?= 之后定义。所谓向前查找,就是规定了一个匹配的内容,然后以这个内容为尾部向前面查找需要匹配的内容。向后匹配用 ?<= 定义(注: JavaScript 不支持向后匹配,Java 对其支持也不完善)。
|
||||||
|
|
||||||
**应用**
|
**应用**
|
||||||
|
|
||||||
@ -349,7 +351,7 @@ aBCd
|
|||||||
|
|
||||||
## 回溯引用条件
|
## 回溯引用条件
|
||||||
|
|
||||||
条件判断为某个子表达式是否匹配,如果匹配则需要继续匹配条件表达式后面的内容。
|
条件为某个子表达式是否匹配,如果匹配则需要继续匹配条件表达式后面的内容。
|
||||||
|
|
||||||
**正则表达式**
|
**正则表达式**
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user