Skip to content

Commit

Permalink
๐ŸŒŸ feat: add 10ใ€1004ใ€1006ใ€1038ใ€1052ใ€115ใ€119ใ€1190ใ€1206ใ€1208ใ€1233ใ€1282ใ€1โ€ฆ
Browse files Browse the repository at this point in the history
โ€ฆ334ใ€1403ใ€150ใ€1413ใ€1422ใ€1438ใ€1442ใ€1482ใ€1486ใ€1503ใ€153ใ€154ใ€155ใ€1603ใ€1631ใ€1662ใ€1584ใ€173ใ€179ใ€1748ใ€1749ใ€1763ใ€1764ใ€1766ใ€1786ใ€1787ใ€190ใ€203ใ€208ใ€23ใ€26ใ€30ใ€213ใ€220ใ€2216ใ€2304ใ€240ใ€2477ใ€2558ใ€263ใ€274ใ€34ใ€38ใ€338ใ€341ใ€354ใ€363 ...
  • Loading branch information
SharingSource committed Nov 21, 2024
1 parent b32636e commit c1a446b
Show file tree
Hide file tree
Showing 117 changed files with 7,969 additions and 1,361 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -74,41 +74,28 @@ Tag : ใ€ŒๅŠจๆ€่ง„ๅˆ’ใ€ใ€ใ€Œๅบๅˆ— DPใ€
ๆœฌ้ข˜ๅฏไปฅไฝฟ็”จๅŠจๆ€่ง„ๅˆ’่ฟ›่กŒๆฑ‚่งฃ๏ผš

* ็Šถๆ€ๅฎšไน‰๏ผš`f(i,j)` ไปฃ่กจ่€ƒ่™‘ `s` ไธญไปฅ `i` ไธบ็ป“ๅฐพ็š„ๅญไธฒๅ’Œ `p` ไธญ็š„ `j` ไธบ็ป“ๅฐพ็š„ๅญไธฒๆ˜ฏๅฆๅŒน้…ใ€‚ๆœ€็ปˆๆˆ‘ไปฌ่ฆๆฑ‚็š„็ป“ๆžœไธบ `f[n][m]` ใ€‚

* ็Šถๆ€่ฝฌ็งป๏ผšไนŸๅฐฑๆ˜ฏๆˆ‘ไปฌ่ฆ่€ƒ่™‘ `f(i,j)` ๅฆ‚ไฝ•ๆฑ‚ๅพ—๏ผŒๅ‰้ข่ฏดๅˆฐไบ† `p` ๆœ‰ไธ‰็งๅญ—็ฌฆ๏ผŒๆ‰€ไปฅ่ฟ™้‡Œ็š„็Šถๆ€่ฝฌ็งปไนŸ่ฆๅˆ†ไธ‰็งๆƒ…ๅ†ต่ฎจ่ฎบ๏ผš

1. `p[j]` ไธบๆ™ฎ้€šๅญ—็ฌฆ๏ผšๅŒน้…็š„ๆกไปถๆ˜ฏๅ‰้ข็š„ๅญ—็ฌฆๅŒน้…๏ผŒๅŒๆ—ถ `s` ไธญ็š„็ฌฌ `i` ไธชๅญ—็ฌฆๅ’Œ `p` ไธญ็š„็ฌฌ `j` ไฝ็›ธๅŒใ€‚

`f(i,j) = f(i - 1, j - 1) && s[i] == p[j]` ใ€‚

2. `p[j]` ไธบ `'.'`๏ผšๅŒน้…็š„ๆกไปถๆ˜ฏๅ‰้ข็š„ๅญ—็ฌฆๅŒน้…๏ผŒ `s` ไธญ็š„็ฌฌ `i` ไธชๅญ—็ฌฆๅฏไปฅๆ˜ฏไปปๆ„ๅญ—็ฌฆใ€‚

`f(i,j) = f(i - 1, j - 1) && p[j] == '.'`ใ€‚

3. `p[j]` ไธบ `'*'`๏ผš่ฏปๅพ— `p[j - 1]` ็š„ๅญ—็ฌฆ๏ผŒไพ‹ๅฆ‚ไธบๅญ—็ฌฆ `a`ใ€‚ ็„ถๅŽๆ นๆฎ `a*` ๅฎž้™…ๅŒน้… `s` ไธญ `a` ็š„ไธชๆ•ฐๆ˜ฏ $0$ ไธชใ€$1$ ไธชใ€$2$ ไธช ...

3.1. ๅฝ“ๅŒน้…ไธบ $0$ ไธช๏ผš`f(i,j) = f(i, j - 2)`

3.2. ๅฝ“ๅŒน้…ไธบ $1$ ไธช๏ผš`f(i,j) = f(i - 1, j - 2) && (s[i] == p[j - 1] || p[j - 1] == '.')`

3.3. ๅฝ“ๅŒน้…ไธบ $2$ ไธช๏ผš`f(i,j) = f(i - 2, j - 2) && ((s[i] == p[j - 1] && s[i - 1] == p[j - 1]) || p[j] == '.')`
1. `p[j]` ไธบๆ™ฎ้€šๅญ—็ฌฆ๏ผšๅŒน้…็š„ๆกไปถๆ˜ฏๅ‰้ข็š„ๅญ—็ฌฆๅŒน้…๏ผŒๅŒๆ—ถ `s` ไธญ็š„็ฌฌ `i` ไธชๅญ—็ฌฆๅ’Œ `p` ไธญ็š„็ฌฌ `j` ไฝ็›ธๅŒใ€‚ ๅณ `f(i,j) = f(i-1, j-1) && s[i] == p[j]` ใ€‚
2. `p[j]` ไธบ `'.'`๏ผšๅŒน้…็š„ๆกไปถๆ˜ฏๅ‰้ข็š„ๅญ—็ฌฆๅŒน้…๏ผŒ `s` ไธญ็š„็ฌฌ `i` ไธชๅญ—็ฌฆๅฏไปฅๆ˜ฏไปปๆ„ๅญ—็ฌฆใ€‚ๅณ `f(i,j) = f(i-1, j-1) && p[j] == '.'`ใ€‚
3. `p[j]` ไธบ `'*'`๏ผš่ฏปๅพ— `p[j-1]` ็š„ๅญ—็ฌฆ๏ผŒไพ‹ๅฆ‚ไธบๅญ—็ฌฆ `a`ใ€‚ ็„ถๅŽๆ นๆฎ `a*` ๅฎž้™…ๅŒน้… `s` ไธญ `a` ็š„ไธชๆ•ฐๆ˜ฏ $0$ ไธชใ€$1$ ไธชใ€$2$ ไธช ...
* ๅฝ“ๅŒน้…ไธบ $0$ ไธช๏ผš`f(i,j) = f(i,j-2)`
* ๅฝ“ๅŒน้…ไธบ $1$ ไธช๏ผš`f(i,j) = f(i-1,j-2) && (s[i] == p[j-1] || p[j-1] == '.')`
* ๅฝ“ๅŒน้…ไธบ $2$ ไธช๏ผš`f(i,j) = f(i-2, j-2) && ((s[i] == p[j-1] && s[i-1] == p[j-1]) || p[j] == '.')`

**ๆˆ‘ไปฌ็Ÿฅ้“๏ผŒ้€š่ฟ‡ใ€Œๆžšไธพใ€ๆฅ็กฎๅฎš `*` ๅˆฐๅบ•ๅŒน้…ๅคšๅฐ‘ไธช `a` ่ฟ™ๆ ท็š„ๅšๆณ•๏ผŒ็ฎ—ๆณ•ๅคๆ‚ๅบฆๆ˜ฏๅพˆ้ซ˜็š„ใ€‚**

**ๆˆ‘ไปฌ้œ€่ฆๆŒ–ๆŽ˜ไธ€ไบ›ใ€Œๆ€ง่ดจใ€ๆฅ็ฎ€ๅŒ–่ฟ™ไธช่ฟ‡็จ‹ใ€‚**

![640.png](https://pic.leetcode-cn.com/1611397993-lmpHIZ-640.png)
![](https://pic.leetcode-cn.com/1611397993-lmpHIZ-640.png)

ไปฃ็ ๏ผš
Java ไปฃ็ ๏ผš
```Java
class Solution {
public boolean isMatch(String ss, String pp) {
// ๆŠ€ๅทง๏ผšๅพ€ๅŽŸๅญ—็ฌฆๅคด้ƒจๆ’ๅ…ฅ็ฉบๆ ผ๏ผŒ่ฟ™ๆ ทๅพ—ๅˆฐ char ๆ•ฐ็ป„ๆ˜ฏไปŽ 1 ๅผ€ๅง‹๏ผŒ่€Œไธ”ๅฏไปฅไฝฟๅพ— f[0][0] = true๏ผŒๅฏไปฅๅฐ† true ่ฟ™ไธช็ป“ๆžœๆปšๅŠจไธ‹ๅŽป
int n = ss.length(), m = pp.length();
ss = " " + ss;
pp = " " + pp;
char[] s = ss.toCharArray();
char[] p = pp.toCharArray();
ss = " " + ss; pp = " " + pp;
char[] s = ss.toCharArray(), p = pp.toCharArray();
// f(i,j) ไปฃ่กจ่€ƒ่™‘ s ไธญ็š„ 1~i ๅญ—็ฌฆๅ’Œ p ไธญ็š„ 1~j ๅญ—็ฌฆ ๆ˜ฏๅฆๅŒน้…
boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;
Expand All @@ -132,6 +119,67 @@ class Solution {
}
}
```
C++ ไปฃ็ ๏ผš
```C++
class Solution {
public:
bool isMatch(string s, string p) {
int n = s.length(), m = p.length();
s = " " + s; p = " " + p;
vector<vector<bool>> f(n + 1, vector<bool>(m + 1, false));
f[0][0] = true;
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j + 1 <= m && p[j + 1] == '*' && p[j] != '*') continue;
if (i - 1 >= 0 && p[j] != '*') {
f[i][j] = f[i - 1][j - 1] && (s[i] == p[j] || p[j] == '.');
} else if (p[j] == '*') {
f[i][j] = (j - 2 >= 0 && f[i][j - 2]) || (i - 1 >= 0 && f[i - 1][j] && (s[i] == p[j - 1] || p[j - 1] == '.'));
}
}
}
return f[n][m];
}
};
```
Python ไปฃ็ ๏ผš
```Python
class Solution:
def isMatch(self, s: str, p: str) -> bool:
n, m = len(s), len(p)
s, p = " " + s, " " + p
f = [[False] * (m + 1) for _ in range(n + 1)]
f[0][0] = True
for i in range(n + 1):
for j in range(1, m + 1):
if j + 1 <= m and p[j + 1] == '*' and p[j] != '*':
continue
if i - 1 >= 0 and p[j] != '*':
f[i][j] = f[i - 1][j - 1] and (s[i] == p[j] or p[j] == '.')
elif p[j] == '*':
f[i][j] = (j - 2 >= 0 and f[i][j - 2]) or (i - 1 >= 0 and f[i - 1][j] and (s[i] == p[j - 1] or p[j - 1] == '.'))
return f[n][m]
```
TypeScript ไปฃ็ ๏ผš
```TypeScript
function isMatch(s: string, p: string): boolean {
let n: number = s.length, m: number = p.length
s = " " + s; p = " " + p;
let f: boolean[][] = new Array(n + 1).fill(false).map(() => new Array(m + 1).fill(false));
f[0][0] = true;
for (let i: number = 0; i <= n; i++) {
for (let j: number = 1; j <= m; j++) {
if (j + 1 <= m && p.charAt(j + 1) === '*' && p.charAt(j) !== '*') continue;
if (i - 1 >= 0 && p.charAt(j) !== '*') {
f[i][j] = f[i - 1][j - 1] && (s.charAt(i) === p.charAt(j) || p.charAt(j) === '.');
} else if (p.charAt(j) === '*') {
f[i][j] = (j - 2 >= 0 && f[i][j - 2]) || (i - 1 >= 0 && f[i - 1][j] && (s.charAt(i) === p.charAt(j - 1) || p.charAt(j - 1) === '.'));
}
}
}
return f[n][m];
};
```
* ๆ—ถ้—ดๅคๆ‚ๅบฆ๏ผš$n$ ่กจ็คบ `s` ็š„้•ฟๅบฆ๏ผŒ$m$ ่กจ็คบ `p` ็š„้•ฟๅบฆ๏ผŒๆ€ปๅ…ฑ $n \times m$ ไธช็Šถๆ€ใ€‚ๅคๆ‚ๅบฆไธบ $O(n \times m)$
* ็ฉบ้—ดๅคๆ‚ๅบฆ๏ผšไฝฟ็”จไบ†ไบŒ็ปดๆ•ฐ็ป„่ฎฐๅฝ•็ป“ๆžœใ€‚ๅคๆ‚ๅบฆไธบ $O(n \times m)$

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,27 @@ Tag : ใ€ŒๅŒๆŒ‡้’ˆใ€ใ€ใ€Œๆป‘ๅŠจ็ช—ๅฃใ€ใ€ใ€ŒไบŒๅˆ†ใ€ใ€ใ€Œๅ‰็ผ€ๅ’Œใ€



็ป™ๅฎšไธ€ไธช็”ฑ่‹ฅๅนฒ $0$ ๅ’Œ $1$ ็ป„ๆˆ็š„ๆ•ฐ็ป„ย `A`๏ผŒๆˆ‘ไปฌๆœ€ๅคšๅฏไปฅๅฐ†ย $K$ย ไธชๅ€ผไปŽ $0$ ๅ˜ๆˆ $1$ ใ€‚
็ป™ๅฎšไธ€ไธช็”ฑ่‹ฅๅนฒ 0 ๅ’Œ 1 ็ป„ๆˆ็š„ๆ•ฐ็ป„ย `A`๏ผŒๆˆ‘ไปฌๆœ€ๅคšๅฏไปฅๅฐ†ย `K`ย ไธชๅ€ผไปŽ 0 ๅ˜ๆˆ 1ใ€‚

่ฟ”ๅ›žไป…ๅŒ…ๅซ $1$ ็š„ๆœ€้•ฟ๏ผˆ่ฟž็ปญ๏ผ‰ๅญๆ•ฐ็ป„็š„้•ฟๅบฆใ€‚
่ฟ”ๅ›žไป…ๅŒ…ๅซ 1 ็š„ๆœ€้•ฟ๏ผˆ่ฟž็ปญ๏ผ‰ๅญๆ•ฐ็ป„็š„้•ฟๅบฆใ€‚


็คบไพ‹ 1๏ผš
```
่พ“ๅ…ฅ๏ผšA = [1,1,1,0,0,0,1,1,1,1,0], K = 2
่พ“ๅ‡บ๏ผš6
่งฃ้‡Š๏ผš
[1,1,1,0,0,1,1,1,1,1,1]
็ฒ—ไฝ“ๆ•ฐๅญ—ไปŽ 0 ็ฟป่ฝฌๅˆฐ 1๏ผŒๆœ€้•ฟ็š„ๅญๆ•ฐ็ป„้•ฟๅบฆไธบ 6ใ€‚
```
็คบไพ‹ 2๏ผš
```
่พ“ๅ…ฅ๏ผšA = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
่พ“ๅ‡บ๏ผš10
่งฃ้‡Š๏ผš
[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
็ฒ—ไฝ“ๆ•ฐๅญ—ไปŽ 0 ็ฟป่ฝฌๅˆฐ 1๏ผŒๆœ€้•ฟ็š„ๅญๆ•ฐ็ป„้•ฟๅบฆไธบ 10ใ€‚
Expand Down Expand Up @@ -50,7 +54,7 @@ Tag : ใ€ŒๅŒๆŒ‡้’ˆใ€ใ€ใ€Œๆป‘ๅŠจ็ช—ๅฃใ€ใ€ใ€ŒไบŒๅˆ†ใ€ใ€ใ€Œๅ‰็ผ€ๅ’Œใ€
* ๅฆ‚ๆžœ $A[i]$ ๆœฌ่บซๅฐฑไธบ 1 ็š„่ฏ๏ผŒๆ— ้กปๆถˆ่€—็ฟป่ฝฌๆฌกๆ•ฐ๏ผŒ$f[i][j] = f[i - 1][j] + 1$ใ€‚
* ๅฆ‚ๆžœ $A[i]$ ๆœฌ่บซไธไธบ 1 ็š„่ฏ๏ผŒ็”ฑไบŽๅฎšไน‰ๆ˜ฏๅฟ…้กปไปฅ $A[i]$ ไธบ็ป“ๅฐพ๏ผŒๅ› ๆญคๅฟ…้กป่ฆ้€‰ๆ‹ฉ็ฟป่ฝฌ่ฏฅไฝ็ฝฎ๏ผŒ$f[i][j] = f[i - 1][j - 1] + 1$ใ€‚

ไปฃ็ ๏ผš
Java ไปฃ็ ๏ผš
```Java
class Solution {
public int longestOnes(int[] nums, int k) {
Expand Down Expand Up @@ -96,23 +100,19 @@ class Solution {

**ๅ› ๆญค๏ผŒๅฏนไบŽๆŸไธช็กฎๅฎš็š„ใ€Œๅทฆ็ซฏ็‚น/ๅณ็ซฏ็‚นใ€่€Œ่จ€๏ผŒไปฅใ€Œๅ…ถๆœ€่ฟœๅณ็ซฏ็‚น/ๆœ€่ฟœๅทฆ็ซฏ็‚นใ€ไธบๅˆ†ๅ‰ฒ็‚น็š„ๅ‰็ผ€ๅ’Œๆ•ฐ่ฝด๏ผŒๅ…ทๆœ‰ใ€ŒไบŒๆฎตๆ€งใ€ใ€‚ๅฏไปฅ้€š่ฟ‡ไบŒๅˆ†ๆฅๆ‰พๅˆ†ๅ‰ฒ็‚นใ€‚**

ไปฃ็ ๏ผš
Java ไปฃ็ ๏ผš
```Java
class Solution {
public int longestOnes(int[] nums, int k) {
int n = nums.length;
int ans = 0;
int n = nums.length, ans = 0;
int[] sum = new int[n + 1];
for (int i = 1; i <= n; i++) sum[i] = sum[i - 1] + nums[i - 1];
for (int i = 0; i < n; i++) {
int l = 0, r = i;
while (l < r) {
int mid = l + r >> 1;
if (check(sum, mid, i, k)) {
r = mid;
} else {
l = mid + 1;
}
if (check(sum, mid, i, k)) r = mid;
else l = mid + 1;
}
if (check(sum, r, i, k)) ans = Math.max(ans, i - r + 1);
}
Expand All @@ -124,6 +124,80 @@ class Solution {
}
}
```
C++ ไปฃ็ ๏ผš
```C++
class Solution {
public:
int longestOnes(vector<int>& nums, int k) {
int n = nums.size(), ans = 0;
vector<int> sum(n + 1, 0);
for (int i = 1; i <= n; i++) sum[i] = sum[i - 1] + nums[i - 1];
for (int i = 0; i < n; i++) {
int l = 0, r = i;
while (l < r) {
int mid = l + r >> 1;
if (check(sum, mid, i, k)) r = mid;
else l = mid + 1;
}
if (check(sum, r, i, k)) ans = max(ans, i - r + 1);
}
return ans;
}
bool check(const vector<int>& sum, int l, int r, int k) {
int tol = sum[r + 1] - sum[l];
int len = r - l + 1;
return len - tol <= k;
}
};
```
Python ไปฃ็ ๏ผš
```Python
class Solution:
def longestOnes(self, nums: List[int], k: int) -> int:
n, ans = len(nums), 0
sumv = [0] * (n + 1)
for i in range(1, n + 1):
sumv[i] = sumv[i - 1] + nums[i - 1]
for i in range(n):
l, r = 0, i
while l < r:
mid = l + r >> 1
if self.check(sumv, mid, i, k):
r = mid
else:
l = mid + 1
if self.check(sumv, l, i, k):
ans = max(ans, i - l + 1)
return ans
def check(self, sumv, l, r, k):
tol = sumv[r + 1] - sumv[l]
lenv = r - l + 1
return lenv - tol <= k
```
TypeScript ไปฃ็ ๏ผš
```TypeScript
function check(sum: number[], l: number, r: number, k: number): boolean {
const tol = sum[r + 1] - sum[l];
const len = r - l + 1;
return len - tol <= k;
}
function longestOnes(nums: number[], k: number): number {
let n = nums.length, ans = 0;
const sum = new Array(n + 1).fill(0);
for (let i = 1; i <= n; i++) sum[i] = sum[i - 1] + nums[i - 1];
for (let i = 0; i < n; i++) {
let l = 0, r = i;
while (l < r) {
let mid = l + r >> 1;
if (check(sum, mid, i, k)) r = mid;
else l = mid + 1;
}
if (check(sum, l, i, k)) ans = Math.max(ans, i - l + 1);
}
return ans;
};
```
* ๆ—ถ้—ดๅคๆ‚ๅบฆ๏ผš$O(n\log{n})$
* ็ฉบ้—ดๅคๆ‚ๅบฆ๏ผš$O(n)$

Expand All @@ -143,12 +217,11 @@ class Solution {

ๅณ็ซฏ็‚นไธ€็›ดๅณ็งป๏ผŒๅทฆ็ซฏ็‚นๅœจ็ช—ๅฃไธๆปก่ถณใ€Œ`len - tol <= k`ใ€็š„ๆ—ถๅ€™่ฟ›่กŒๅณ็งป๏ผŒๅณๅฏๅšๅˆฐ็บฟ็จ‹ๆ‰ซๆ็š„ๅคๆ‚ๅบฆใ€‚

ไปฃ็ ๏ผš
Java ไปฃ็ ๏ผš
```Java
class Solution {
public int longestOnes(int[] nums, int k) {
int n = nums.length;
int ans = 0;
int n = nums.length, ans = 0;
for (int i = 0, j = 0, tot = 0; i < n; i++) {
tot += nums[i];
while ((i - j + 1) - tot > k) tot -= nums[j++];
Expand All @@ -158,6 +231,47 @@ class Solution {
}
}
```
C++ ไปฃ็ ๏ผš
```C++
class Solution {
public:
int longestOnes(vector<int>& nums, int k) {
int n = nums.size(), ans = 0;
for (int i = 0, j = 0, tot = 0; i < n; i++) {
tot += nums[i];
while ((i - j + 1) - tot > k) tot -= nums[j++];
ans = max(ans, i - j + 1);
}
return ans;
}
};
```
Python ไปฃ็ ๏ผš
```Python
class Solution:
def longestOnes(self, nums: List[int], k: int) -> int:
n, ans = len(nums), 0
j, tot = 0, 0
for i in range(n):
tot += nums[i]
while (i - j + 1) - tot > k:
tot -= nums[j]
j += 1
ans = max(ans, i - j + 1)
return ans
```
TypeScript ไปฃ็ ๏ผš
```TypeScript
function longestOnes(nums: number[], k: number): number {
let n = nums.length, ans = 0;
for (let i = 0, j = 0, tot = 0; i < n; i++) {
tot += nums[i];
while ((i - j + 1) - tot > k) tot -= nums[j++];
ans = Math.max(ans, i - j + 1);
}
return ans;
};
```
* ๆ—ถ้—ดๅคๆ‚ๅบฆ๏ผš$O(n)$
* ็ฉบ้—ดๅคๆ‚ๅบฆ๏ผš$O(1)$

Expand Down
Loading

0 comments on commit c1a446b

Please sign in to comment.