diff --git a/solution/0100-0199/0128.Longest Consecutive Sequence/README.md b/solution/0100-0199/0128.Longest Consecutive Sequence/README.md index a70eb4d730473..3d213b559ee7f 100644 --- a/solution/0100-0199/0128.Longest Consecutive Sequence/README.md +++ b/solution/0100-0199/0128.Longest Consecutive Sequence/README.md @@ -38,6 +38,13 @@ tags: 输出:9 +
示例 3:
+ ++输入:nums = [1,0,1,2] +输出:3 ++
提示:
diff --git a/solution/0100-0199/0128.Longest Consecutive Sequence/README_EN.md b/solution/0100-0199/0128.Longest Consecutive Sequence/README_EN.md index e9cf2fe50f0aa..cfd2db7f9dccf 100644 --- a/solution/0100-0199/0128.Longest Consecutive Sequence/README_EN.md +++ b/solution/0100-0199/0128.Longest Consecutive Sequence/README_EN.md @@ -38,6 +38,13 @@ tags: Output: 9 +Example 3:
+ ++Input: nums = [1,0,1,2] +Output: 3 ++
Constraints:
diff --git a/solution/1200-1299/1287.Element Appearing More Than 25% In Sorted Array/README.md b/solution/1200-1299/1287.Element Appearing More Than 25% In Sorted Array/README.md index a6ca557494e54..ec6c79640e962 100644 --- a/solution/1200-1299/1287.Element Appearing More Than 25% In Sorted Array/README.md +++ b/solution/1200-1299/1287.Element Appearing More Than 25% In Sorted Array/README.md @@ -46,7 +46,11 @@ tags: -### 方法一 +### 方法一:遍历 + +我们从头开始遍历数组 $\textit{arr}$,对于每个元素 $\textit{arr}[i]$,我们检查 $\textit{arr}[i]$ 是否等于 $\textit{arr}[i + \left\lfloor \frac{n}{4} \right\rfloor]$,其中 $n$ 是数组的长度。如果等于,那么 $\textit{arr}[i]$ 就是我们要找的元素,直接返回即可。 + +时间复杂度 $O(n)$,其中 $n$ 是数组 $\textit{arr}$ 的长度。空间复杂度 $O(1)$。 @@ -56,10 +60,9 @@ tags: class Solution: def findSpecialInteger(self, arr: List[int]) -> int: n = len(arr) - for i, val in enumerate(arr): - if val == arr[i + (n >> 2)]: - return val - return 0 + for i, x in enumerate(arr): + if x == arr[(i + (n >> 2))]: + return x ``` #### Java @@ -67,13 +70,11 @@ class Solution: ```java class Solution { public int findSpecialInteger(int[] arr) { - int n = arr.length; - for (int i = 0; i < n; ++i) { - if (arr[i] == arr[i + (n >> 2)]) { + for (int i = 0;; ++i) { + if (arr[i] == (arr[i + (arr.length >> 2)])) { return arr[i]; } } - return 0; } } ``` @@ -84,10 +85,11 @@ class Solution { class Solution { public: int findSpecialInteger(vector2 <= nums.length <= 2 * 105
1 <= nums[i] <= 109
1 <= k <= 109
k
.k
.You are given a 2D integer array squares
. Each squares[i] = [xi, yi, li]
represents the coordinates of the bottom-left point and the side length of a square parallel to the x-axis.
Find the minimum y-coordinate value of a horizontal line such that the total area covered by squares above the line equals the total area covered by squares below the line.
diff --git a/solution/3400-3499/3455.Shortest Matching Substring/README_EN.md b/solution/3400-3499/3455.Shortest Matching Substring/README_EN.md index 6a00896fcce64..502f8050ef560 100644 --- a/solution/3400-3499/3455.Shortest Matching Substring/README_EN.md +++ b/solution/3400-3499/3455.Shortest Matching Substring/README_EN.md @@ -15,14 +15,11 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3400-3499/3455.ShYou are given a string s
and a pattern string p
, where p
contains exactly two '*'
characters.
The '*'
in p
matches any sequence of zero or more characters.
Return the length of the shortest substring in s
that matches p
. If there is no such substring, return -1.
A substring is a contiguous sequence of characters within a string (the empty substring is considered valid).
- +Return the length of the shortest substring in s
that matches p
. If there is no such substring, return -1.
Example 1:
diff --git a/solution/3400-3499/3456.Find Special Substring of Length K/README.md b/solution/3400-3499/3456.Find Special Substring of Length K/README.md index c81aed3b45adc..4e67dee4813b0 100644 --- a/solution/3400-3499/3456.Find Special Substring of Length K/README.md +++ b/solution/3400-3499/3456.Find Special Substring of Length K/README.md @@ -76,32 +76,111 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3400-3499/3456.Fi -### 方法一 +### 方法一:双指针 + +题目相当于要我们找出每一段连续的相同字符,然后判断是否存在一段长度为 $k$ 的子字符串,若存在则返回 $\textit{true}$,否则返回 $\textit{false}$。 + +我们可以用双指针 $l$ 和 $r$ 来遍历字符串 $s$,当 $s[l] = s[r]$ 时,$r$ 向右移动,直到 $s[r] \neq s[l]$,此时判断 $r - l$ 是否等于 $k$,若等于则返回 $\textit{true}$,否则 $l$ 移动到 $r$ 继续遍历。 + +时间复杂度 $O(n)$,其中 $n$ 为字符串 $s$ 的长度。空间复杂度 $O(1)$。 #### Python3 ```python - +class Solution: + def hasSpecialSubstring(self, s: str, k: int) -> bool: + l, n = 0, len(s) + while l < n: + r = l + while r < n and s[r] == s[l]: + r += 1 + if r - l == k: + return True + l = r + return False ``` #### Java ```java - +class Solution { + public boolean hasSpecialSubstring(String s, int k) { + int n = s.length(); + for (int l = 0, cnt = 0; l < n;) { + int r = l + 1; + while (r < n && s.charAt(r) == s.charAt(l)) { + ++r; + } + if (r - l == k) { + return true; + } + l = r; + } + return false; + } +} ``` #### C++ ```cpp - +class Solution { +public: + bool hasSpecialSubstring(string s, int k) { + int n = s.length(); + for (int l = 0, cnt = 0; l < n;) { + int r = l + 1; + while (r < n && s[r] == s[l]) { + ++r; + } + if (r - l == k) { + return true; + } + l = r; + } + return false; + } +}; ``` #### Go ```go +func hasSpecialSubstring(s string, k int) bool { + n := len(s) + for l := 0; l < n; { + r := l + 1 + for r < n && s[r] == s[l] { + r++ + } + if r-l == k { + return true + } + l = r + } + return false +} +``` +#### TypeScript + +```ts +function hasSpecialSubstring(s: string, k: number): boolean { + const n = s.length; + for (let l = 0; l < n; ) { + let r = l + 1; + while (r < n && s[r] === s[l]) { + r++; + } + if (r - l === k) { + return true; + } + l = r; + } + return false; +} ``` diff --git a/solution/3400-3499/3456.Find Special Substring of Length K/README_EN.md b/solution/3400-3499/3456.Find Special Substring of Length K/README_EN.md index ad279f74a4ab8..60a5fab3f76af 100644 --- a/solution/3400-3499/3456.Find Special Substring of Length K/README_EN.md +++ b/solution/3400-3499/3456.Find Special Substring of Length K/README_EN.md @@ -72,32 +72,111 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3400-3499/3456.Fi -### Solution 1 +### Solution 1: Two Pointers + +The problem essentially asks us to find each segment of consecutive identical characters and then determine if there exists a substring of length $k$. If such a substring exists, return $\textit{true}$; otherwise, return $\textit{false}$. + +We can use two pointers $l$ and $r$ to traverse the string $s$. When $s[l] = s[r]$, move $r$ to the right until $s[r] \neq s[l]$. At this point, check if $r - l$ equals $k$. If it does, return $\textit{true}$; otherwise, move $l$ to $r$ and continue traversing. + +The time complexity is $O(n)$, where $n$ is the length of the string $s$. The space complexity is $O(1)$. #### Python3 ```python - +class Solution: + def hasSpecialSubstring(self, s: str, k: int) -> bool: + l, n = 0, len(s) + while l < n: + r = l + while r < n and s[r] == s[l]: + r += 1 + if r - l == k: + return True + l = r + return False ``` #### Java ```java - +class Solution { + public boolean hasSpecialSubstring(String s, int k) { + int n = s.length(); + for (int l = 0, cnt = 0; l < n;) { + int r = l + 1; + while (r < n && s.charAt(r) == s.charAt(l)) { + ++r; + } + if (r - l == k) { + return true; + } + l = r; + } + return false; + } +} ``` #### C++ ```cpp - +class Solution { +public: + bool hasSpecialSubstring(string s, int k) { + int n = s.length(); + for (int l = 0, cnt = 0; l < n;) { + int r = l + 1; + while (r < n && s[r] == s[l]) { + ++r; + } + if (r - l == k) { + return true; + } + l = r; + } + return false; + } +}; ``` #### Go ```go +func hasSpecialSubstring(s string, k int) bool { + n := len(s) + for l := 0; l < n; { + r := l + 1 + for r < n && s[r] == s[l] { + r++ + } + if r-l == k { + return true + } + l = r + } + return false +} +``` +#### TypeScript + +```ts +function hasSpecialSubstring(s: string, k: number): boolean { + const n = s.length; + for (let l = 0; l < n; ) { + let r = l + 1; + while (r < n && s[r] === s[l]) { + r++; + } + if (r - l === k) { + return true; + } + l = r; + } + return false; +} ``` diff --git a/solution/3400-3499/3456.Find Special Substring of Length K/Solution.cpp b/solution/3400-3499/3456.Find Special Substring of Length K/Solution.cpp new file mode 100644 index 0000000000000..b85c7ce3349a2 --- /dev/null +++ b/solution/3400-3499/3456.Find Special Substring of Length K/Solution.cpp @@ -0,0 +1,17 @@ +class Solution { +public: + bool hasSpecialSubstring(string s, int k) { + int n = s.length(); + for (int l = 0, cnt = 0; l < n;) { + int r = l + 1; + while (r < n && s[r] == s[l]) { + ++r; + } + if (r - l == k) { + return true; + } + l = r; + } + return false; + } +}; diff --git a/solution/3400-3499/3456.Find Special Substring of Length K/Solution.go b/solution/3400-3499/3456.Find Special Substring of Length K/Solution.go new file mode 100644 index 0000000000000..3d97c7d78a4bd --- /dev/null +++ b/solution/3400-3499/3456.Find Special Substring of Length K/Solution.go @@ -0,0 +1,14 @@ +func hasSpecialSubstring(s string, k int) bool { + n := len(s) + for l := 0; l < n; { + r := l + 1 + for r < n && s[r] == s[l] { + r++ + } + if r-l == k { + return true + } + l = r + } + return false +} diff --git a/solution/3400-3499/3456.Find Special Substring of Length K/Solution.java b/solution/3400-3499/3456.Find Special Substring of Length K/Solution.java new file mode 100644 index 0000000000000..de3e650a7ed03 --- /dev/null +++ b/solution/3400-3499/3456.Find Special Substring of Length K/Solution.java @@ -0,0 +1,16 @@ +class Solution { + public boolean hasSpecialSubstring(String s, int k) { + int n = s.length(); + for (int l = 0, cnt = 0; l < n;) { + int r = l + 1; + while (r < n && s.charAt(r) == s.charAt(l)) { + ++r; + } + if (r - l == k) { + return true; + } + l = r; + } + return false; + } +} diff --git a/solution/3400-3499/3456.Find Special Substring of Length K/Solution.py b/solution/3400-3499/3456.Find Special Substring of Length K/Solution.py new file mode 100644 index 0000000000000..2e76a1ff2caf4 --- /dev/null +++ b/solution/3400-3499/3456.Find Special Substring of Length K/Solution.py @@ -0,0 +1,11 @@ +class Solution: + def hasSpecialSubstring(self, s: str, k: int) -> bool: + l, n = 0, len(s) + while l < n: + r = l + while r < n and s[r] == s[l]: + r += 1 + if r - l == k: + return True + l = r + return False diff --git a/solution/3400-3499/3456.Find Special Substring of Length K/Solution.ts b/solution/3400-3499/3456.Find Special Substring of Length K/Solution.ts new file mode 100644 index 0000000000000..97750741557dd --- /dev/null +++ b/solution/3400-3499/3456.Find Special Substring of Length K/Solution.ts @@ -0,0 +1,14 @@ +function hasSpecialSubstring(s: string, k: number): boolean { + const n = s.length; + for (let l = 0; l < n; ) { + let r = l + 1; + while (r < n && s[r] === s[l]) { + r++; + } + if (r - l === k) { + return true; + } + l = r; + } + return false; +} diff --git a/solution/3400-3499/3457.Eat Pizzas!/README.md b/solution/3400-3499/3457.Eat Pizzas!/README.md index c911a279f340b..a8c8d4b8ec5bf 100644 --- a/solution/3400-3499/3457.Eat Pizzas!/README.md +++ b/solution/3400-3499/3457.Eat Pizzas!/README.md @@ -77,32 +77,120 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3400-3499/3457.Ea -### 方法一 +### 方法一:贪心 + 排序 + +根据题目描述,我们每天可以吃 $4$ 个披萨。在奇数天,我们可以得到这 $4$ 个披萨中的最大值,而在偶数天,我们可以得到这 $4$ 个披萨中的第二大值。 + +因此,我们可以将披萨按重量从小到大排序,一共能吃 $\textit{days} = n / 4$ 天,那么一共有 $\textit{odd} = (\textit{days} + 1) / 2$ 天是奇数天,一共有 $\textit{even} = \textit{days} - \textit{odd}$ 天是偶数天。 + +考虑奇数天,我们可以选择最大的 $\textit{odd}$ 个披萨,以及最小的 $\textit{odd} \times 3$ 个披萨,增加的重量为 $\sum_{i = n - \textit{odd}}^{n - 1} \textit{pizzas}[i]$。 + +考虑偶数天,我们在剩余的披萨中,每次贪心地选择最大的两个披萨,以及最小的两个披萨,增加的重量为 $\sum_{i = n - \textit{odd} - 2}^{n - \textit{odd} - 2 \times \textit{even}} \textit{pizzas}[i]$。 + +时间复杂度 $O(n \times \log n)$,空间复杂度 $O(\log n)$。其中 $n$ 是数组 $\textit{pizzas}$ 的长度。 #### Python3 ```python - +class Solution: + def maxWeight(self, pizzas: List[int]) -> int: + days = len(pizzas) // 4 + pizzas.sort() + odd = (days + 1) // 2 + even = days - odd + ans = sum(pizzas[-odd:]) + i = len(pizzas) - odd - 2 + for _ in range(even): + ans += pizzas[i] + i -= 2 + return ans ``` #### Java ```java - +class Solution { + public long maxWeight(int[] pizzas) { + int n = pizzas.length; + int days = n / 4; + Arrays.sort(pizzas); + int odd = (days + 1) / 2; + int even = days / 2; + long ans = 0; + for (int i = n - odd; i < n; ++i) { + ans += pizzas[i]; + } + for (int i = n - odd - 2; even > 0; --even) { + ans += pizzas[i]; + i -= 2; + } + return ans; + } +} ``` #### C++ ```cpp - +class Solution { +public: + long long maxWeight(vector