Skip to content

Commit 773ea8a

Browse files
committed
feat: add solutions to lc problems: No.2389~2392
* No.2389.Longest Subsequence With Limited Sum * No.2390.Removing Stars From a String * No.2391.Minimum Amount of Time to Collect Garbage * No.2392.Build a Matrix With Condition
1 parent 999bada commit 773ea8a

File tree

41 files changed

+2124
-26
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+2124
-26
lines changed

solution/0300-0399/0336.Palindrome Pairs/README.md

-2
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,6 @@
3232
<strong>输出:</strong>[[0,1],[1,0]]
3333
</pre>
3434

35-
36-
3735
<p><strong>提示:</strong></p>
3836

3937
<ul>

solution/0500-0599/0554.Brick Wall/README.md

-2
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@
2828
<strong>输出:</strong>3
2929
</pre>
3030

31-
32-
3331
<p><strong>提示:</strong></p>
3432

3533
<ul>

solution/0600-0699/0637.Average of Levels in Binary Tree/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ var averageOfLevels = function (root) {
243243
* @param {TreeNode} root
244244
* @return {number[]}
245245
*/
246-
var averageOfLevels = function(root) {
246+
var averageOfLevels = function (root) {
247247
let s = [];
248248
let cnt = [];
249249
function dfs(root, i) {

solution/0600-0699/0637.Average of Levels in Binary Tree/README_EN.md

+1-2
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,6 @@ var averageOfLevels = function (root) {
212212
};
213213
```
214214

215-
216215
```js
217216
/**
218217
* Definition for a binary tree node.
@@ -226,7 +225,7 @@ var averageOfLevels = function (root) {
226225
* @param {TreeNode} root
227226
* @return {number[]}
228227
*/
229-
var averageOfLevels = function(root) {
228+
var averageOfLevels = function (root) {
230229
let s = [];
231230
let cnt = [];
232231
function dfs(root, i) {

solution/0700-0799/0775.Global and Local Inversions/README.md

-2
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@
4242
<strong>解释:</strong>有 2 个全局倒置,和 1 个局部倒置。
4343
</pre>
4444

45-
46-
4745
<p><strong>提示:</strong></p>
4846

4947
<ul>

solution/0800-0899/0830.Positions of Large Groups/README.md

-2
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,6 @@
4848
<strong>输出:</strong>[]
4949
</pre>
5050

51-
52-
5351
<p><strong>提示:</strong></p>
5452

5553
<ul>

solution/1400-1499/1472.Design Browser History/README.md

+6-6
Original file line numberDiff line numberDiff line change
@@ -111,19 +111,19 @@ class BrowserHistory {
111111
public BrowserHistory(String homepage) {
112112
visit(homepage);
113113
}
114-
114+
115115
public void visit(String url) {
116116
stk1.push(url);
117117
stk2.clear();
118118
}
119-
119+
120120
public String back(int steps) {
121121
for (; steps > 0 && stk1.size() > 1; --steps) {
122122
stk2.push(stk1.pop());
123123
}
124124
return stk1.peek();
125125
}
126-
126+
127127
public String forward(int steps) {
128128
for (; steps > 0 && !stk2.isEmpty(); --steps) {
129129
stk1.push(stk2.pop());
@@ -152,20 +152,20 @@ public:
152152
BrowserHistory(string homepage) {
153153
visit(homepage);
154154
}
155-
155+
156156
void visit(string url) {
157157
stk1.push(url);
158158
stk2 = stack<string>();
159159
}
160-
160+
161161
string back(int steps) {
162162
for (; steps && stk1.size() > 1; --steps) {
163163
stk2.push(stk1.top());
164164
stk1.pop();
165165
}
166166
return stk1.top();
167167
}
168-
168+
169169
string forward(int steps) {
170170
for (; steps && !stk2.empty(); --steps) {
171171
stk1.push(stk2.top());

solution/1400-1499/1472.Design Browser History/README_EN.md

+6-6
Original file line numberDiff line numberDiff line change
@@ -98,19 +98,19 @@ class BrowserHistory {
9898
public BrowserHistory(String homepage) {
9999
visit(homepage);
100100
}
101-
101+
102102
public void visit(String url) {
103103
stk1.push(url);
104104
stk2.clear();
105105
}
106-
106+
107107
public String back(int steps) {
108108
for (; steps > 0 && stk1.size() > 1; --steps) {
109109
stk2.push(stk1.pop());
110110
}
111111
return stk1.peek();
112112
}
113-
113+
114114
public String forward(int steps) {
115115
for (; steps > 0 && !stk2.isEmpty(); --steps) {
116116
stk1.push(stk2.pop());
@@ -139,20 +139,20 @@ public:
139139
BrowserHistory(string homepage) {
140140
visit(homepage);
141141
}
142-
142+
143143
void visit(string url) {
144144
stk1.push(url);
145145
stk2 = stack<string>();
146146
}
147-
147+
148148
string back(int steps) {
149149
for (; steps && stk1.size() > 1; --steps) {
150150
stk2.push(stk1.top());
151151
stk1.pop();
152152
}
153153
return stk1.top();
154154
}
155-
155+
156156
string forward(int steps) {
157157
for (; steps && !stk2.empty(); --steps) {
158158
stk1.push(stk2.top());

solution/1400-1499/1472.Design Browser History/Solution.py

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
class BrowserHistory:
2-
32
def __init__(self, homepage: str):
43
self.stk1 = []
54
self.stk2 = []
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
# [2389. 和有限的最长子序列](https://leetcode.cn/problems/longest-subsequence-with-limited-sum)
2+
3+
[English Version](/solution/2300-2399/2389.Longest%20Subsequence%20With%20Limited%20Sum/README_EN.md)
4+
5+
## 题目描述
6+
7+
<!-- 这里写题目描述 -->
8+
9+
<p>给你一个长度为 <code>n</code>&nbsp;的整数数组 <code>nums</code> ,和一个长度为 <code>m</code> 的整数数组 <code>queries</code> 。</p>
10+
11+
<p>返回一个长度为 <code>m</code> 的数组<em> </em><code>answer</code><em> </em>,其中<em> </em><code>answer[i]</code><em> </em>是 <code>nums</code> 中<span style=""> </span>元素之和小于等于 <code>queries[i]</code> 的 <strong>子序列</strong> 的 <strong>最大</strong> 长度<span style="">&nbsp;</span><span style=""> </span>。</p>
12+
13+
<p><strong>子序列</strong> 是由一个数组删除某些元素(也可以不删除)但不改变剩余元素顺序得到的一个数组。</p>
14+
15+
<p>&nbsp;</p>
16+
17+
<p><strong>示例 1:</strong></p>
18+
19+
<pre>
20+
<strong>输入:</strong>nums = [4,5,2,1], queries = [3,10,21]
21+
<strong>输出:</strong>[2,3,4]
22+
<strong>解释:</strong>queries 对应的 answer 如下:
23+
- 子序列 [2,1] 的和小于或等于 3 。可以证明满足题目要求的子序列的最大长度是 2 ,所以 answer[0] = 2 。
24+
- 子序列 [4,5,1] 的和小于或等于 10 。可以证明满足题目要求的子序列的最大长度是 3 ,所以 answer[1] = 3 。
25+
- 子序列 [4,5,2,1] 的和小于或等于 21 。可以证明满足题目要求的子序列的最大长度是 4 ,所以 answer[2] = 4 。
26+
</pre>
27+
28+
<p><strong>示例 2:</strong></p>
29+
30+
<pre>
31+
<strong>输入:</strong>nums = [2,3,4,5], queries = [1]
32+
<strong>输出:</strong>[0]
33+
<strong>解释:</strong>空子序列是唯一一个满足元素和小于或等于 1 的子序列,所以 answer[0] = 0 。</pre>
34+
35+
<p>&nbsp;</p>
36+
37+
<p><strong>提示:</strong></p>
38+
39+
<ul>
40+
<li><code>n == nums.length</code></li>
41+
<li><code>m == queries.length</code></li>
42+
<li><code>1 &lt;= n, m &lt;= 1000</code></li>
43+
<li><code>1 &lt;= nums[i], queries[i] &lt;= 10<sup>6</sup></code></li>
44+
</ul>
45+
46+
## 解法
47+
48+
<!-- 这里可写通用的实现逻辑 -->
49+
50+
**方法一:排序 + 前缀和 + 二分查找**
51+
52+
`nums` 排序,对于每个 `queries[i]`,求出 `nums` 中所有元素之和小于等于 `queries[i]` 的子序列的最大长度。
53+
54+
时间复杂度 $O(n\log n + m\log n)$。其中 $n$ 为 `nums` 的长度,$m$ 为 `queries` 的长度。
55+
56+
<!-- tabs:start -->
57+
58+
### **Python3**
59+
60+
<!-- 这里可写当前语言的特殊实现逻辑 -->
61+
62+
```python
63+
class Solution:
64+
def answerQueries(self, nums: List[int], queries: List[int]) -> List[int]:
65+
nums.sort()
66+
s = list(accumulate(nums))
67+
return [bisect_right(s, v) for v in queries]
68+
```
69+
70+
### **Java**
71+
72+
<!-- 这里可写当前语言的特殊实现逻辑 -->
73+
74+
```java
75+
class Solution {
76+
public int[] answerQueries(int[] nums, int[] queries) {
77+
Arrays.sort(nums);
78+
int n = nums.length;
79+
int[] s = new int[n + 1];
80+
for (int i = 0; i < n; ++i) {
81+
s[i + 1] = s[i] + nums[i];
82+
}
83+
int m = queries.length;
84+
int[] ans = new int[m];
85+
for (int i = 0; i < m; ++i) {
86+
ans[i] = search(s, queries[i]);
87+
}
88+
return ans;
89+
}
90+
91+
private int search(int[] s, int v) {
92+
int left = 1, right = s.length;
93+
while (left < right) {
94+
int mid = (left + right) >> 1;
95+
if (s[mid] > v) {
96+
right = mid;
97+
} else {
98+
left = mid + 1;
99+
}
100+
}
101+
return left - 1;
102+
}
103+
}
104+
```
105+
106+
### **C++**
107+
108+
```cpp
109+
class Solution {
110+
public:
111+
vector<int> answerQueries(vector<int>& nums, vector<int>& queries) {
112+
sort(nums.begin(), nums.end());
113+
int n = nums.size(), m = queries.size();
114+
vector<int> s(n + 1);
115+
for (int i = 0; i < n; ++i) {
116+
s[i + 1] = s[i] + nums[i];
117+
}
118+
vector<int> ans(m);
119+
for (int i = 0; i < m; ++i) {
120+
ans[i] = upper_bound(s.begin() + 1, s.end(), queries[i]) - s.begin() - 1;
121+
}
122+
return ans;
123+
}
124+
};
125+
```
126+
127+
### **Go**
128+
129+
```go
130+
func answerQueries(nums []int, queries []int) []int {
131+
sort.Ints(nums)
132+
n, m := len(nums), len(queries)
133+
s := make([]int, n+1)
134+
for i, v := range nums {
135+
s[i+1] = s[i] + v
136+
}
137+
ans := make([]int, m)
138+
for i, v := range queries {
139+
left, right := 1, len(s)
140+
for left < right {
141+
mid := (left + right) >> 1
142+
if s[mid] > v {
143+
right = mid
144+
} else {
145+
left = mid + 1
146+
}
147+
}
148+
ans[i] = left - 1
149+
}
150+
return ans
151+
}
152+
```
153+
154+
### **TypeScript**
155+
156+
```ts
157+
158+
```
159+
160+
### **...**
161+
162+
```
163+
164+
165+
```
166+
167+
<!-- tabs:end -->

0 commit comments

Comments
 (0)