Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 794530a

Browse files
feat: add ts solution to lc problem: No.2137 (#1724)
No.2137.Pour Water Between Buckets to Make Water Levels Equal
1 parent a2fb870 commit 794530a

File tree

3 files changed

+73
-3
lines changed

3 files changed

+73
-3
lines changed

‎solution/2100-2199/2137.Pour Water Between Buckets to Make Water Levels Equal/README.md‎

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060

6161
我们注意到,如果一个水量 $x$ 满足条件,那么所有小于 $x$ 的水量也满足条件。因此我们可以使用二分查找的方法找到最大的满足条件的水量。
6262

63-
我们定义二分查找的左边界 $l=0,ドル右边界 $r=\max(buckets)$。每次二分查找时,我们取 $l$ 和 $r$ 的中点 $m,ドル判断 $m$ 是否满足条件。如果满足条件,那么我们将 $l$ 更新为 $m,ドル否则我们将 $r$ 更新为 $m$。在二分查找结束后,最大的满足条件的水量即为 $l$。
63+
我们定义二分查找的左边界 $l=0,ドル右边界 $r=\max(buckets)$。每次二分查找时,我们取 $l$ 和 $r$ 的中点 $mid,ドル判断 $mid$ 是否满足条件。如果满足条件,那么我们将 $l$ 更新为 $mid,ドル否则我们将 $r$ 更新为 $m$。在二分查找结束后,最大的满足条件的水量即为 $l$。
6464

6565
问题的关键转换为如果判断一个水量 $v$ 是否满足条件。我们可以遍历所有水桶,对于每个水桶,如果其水量大于 $v,ドル那么需要倒出 $x-v$ 的水量;如果其水量小于 $v,ドル那么需要向其中倒入 $(v-x)\times\frac{100}{100-\textit{loss}}$ 的水量。如果倒出的水量大于等于倒入的水量,那么说明 $v$ 满足条件。
6666

@@ -195,7 +195,30 @@ func equalizeWater(buckets []int, loss int) float64 {
195195
### **TypeScript**
196196

197197
```ts
198-
198+
function equalizeWater(buckets: number[], loss: number): number {
199+
let l = 0;
200+
let r = Math.max(...buckets);
201+
const check = (v: number): boolean => {
202+
let [a, b] = [0, 0];
203+
for (const x of buckets) {
204+
if (x >= v) {
205+
a += x - v;
206+
} else {
207+
b += ((v - x) * 100) / (100 - loss);
208+
}
209+
}
210+
return a >= b;
211+
};
212+
while (r - l > 1e-5) {
213+
const mid = (l + r) / 2;
214+
if (check(mid)) {
215+
l = mid;
216+
} else {
217+
r = mid;
218+
}
219+
}
220+
return l;
221+
}
199222
```
200223

201224
### **...**

‎solution/2100-2199/2137.Pour Water Between Buckets to Make Water Levels Equal/README_EN.md‎

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,30 @@ func equalizeWater(buckets []int, loss int) float64 {
178178
### **TypeScript**
179179

180180
```ts
181-
181+
function equalizeWater(buckets: number[], loss: number): number {
182+
let l = 0;
183+
let r = Math.max(...buckets);
184+
const check = (v: number): boolean => {
185+
let [a, b] = [0, 0];
186+
for (const x of buckets) {
187+
if (x >= v) {
188+
a += x - v;
189+
} else {
190+
b += ((v - x) * 100) / (100 - loss);
191+
}
192+
}
193+
return a >= b;
194+
};
195+
while (r - l > 1e-5) {
196+
const mid = (l + r) / 2;
197+
if (check(mid)) {
198+
l = mid;
199+
} else {
200+
r = mid;
201+
}
202+
}
203+
return l;
204+
}
182205
```
183206

184207
### **...**
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
function equalizeWater(buckets: number[], loss: number): number {
2+
let l = 0;
3+
let r = Math.max(...buckets);
4+
const check = (v: number): boolean => {
5+
let [a, b] = [0, 0];
6+
for (const x of buckets) {
7+
if (x >= v) {
8+
a += x - v;
9+
} else {
10+
b += ((v - x) * 100) / (100 - loss);
11+
}
12+
}
13+
return a >= b;
14+
};
15+
while (r - l > 1e-5) {
16+
const mid = (l + r) / 2;
17+
if (check(mid)) {
18+
l = mid;
19+
} else {
20+
r = mid;
21+
}
22+
}
23+
return l;
24+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /