Skip to content

Commit cdb1240

Browse files
committed
feat: update solutions to lc problem: No.1891
1 parent dbeacb3 commit cdb1240

File tree

8 files changed

+59
-20
lines changed

8 files changed

+59
-20
lines changed

solution/1800-1899/1891.Cutting Ribbons/README.md

+20-7
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070

7171
我们发现,如果我们能够得到长度为 $x$ 的 $k$ 根绳子,那么我们一定能够得到长度为 $x - 1$ 的 $k$ 根绳子,这存在着单调性。因此,我们可以使用二分查找的方法,找到最大的长度 $x$,使得我们能够得到长度为 $x$ 的 $k$ 根绳子。
7272

73-
我们定义二分查找的左边界 $left=0$, $right=10^5$,中间值 $mid=(left+right+1)/2$,然后计算当前长度为 $mid$ 的绳子能够得到的数量 $cnt$,如果 $cnt \geq k$,说明我们能够得到长度为 $mid$ 的 $k$ 根绳子,那么我们将 $left$ 更新为 $mid$,否则我们将 $right$ 更新为 $mid-1$。
73+
我们定义二分查找的左边界 $left=0$, $right=\max(ribbons)$,中间值 $mid=(left+right+1)/2$,然后计算当前长度为 $mid$ 的绳子能够得到的数量 $cnt$,如果 $cnt \geq k$,说明我们能够得到长度为 $mid$ 的 $k$ 根绳子,那么我们将 $left$ 更新为 $mid$,否则我们将 $right$ 更新为 $mid-1$。
7474

7575
最后,我们返回 $left$ 即可。
7676

@@ -85,7 +85,7 @@
8585
```python
8686
class Solution:
8787
def maxLength(self, ribbons: List[int], k: int) -> int:
88-
left, right = 0, 100000
88+
left, right = 0, max(ribbons)
8989
while left < right:
9090
mid = (left + right + 1) >> 1
9191
cnt = sum(x // mid for x in ribbons)
@@ -103,7 +103,10 @@ class Solution:
103103
```java
104104
class Solution {
105105
public int maxLength(int[] ribbons, int k) {
106-
int left = 0, right = 100000;
106+
int left = 0, right = 0;
107+
for (int x : ribbons) {
108+
right = Math.max(right, x);
109+
}
107110
while (left < right) {
108111
int mid = (left + right + 1) >>> 1;
109112
int cnt = 0;
@@ -127,7 +130,7 @@ class Solution {
127130
class Solution {
128131
public:
129132
int maxLength(vector<int>& ribbons, int k) {
130-
int left = 0, right = 1e5;
133+
int left = 0, right = *max_element(ribbons.begin(), ribbons.end());
131134
while (left < right) {
132135
int mid = (left + right + 1) >> 1;
133136
int cnt = 0;
@@ -149,7 +152,10 @@ public:
149152
150153
```go
151154
func maxLength(ribbons []int, k int) int {
152-
left, right := 0, 100000
155+
left, right := 0, 0
156+
for _, x := range ribbons {
157+
right = max(right, x)
158+
}
153159
for left < right {
154160
mid := (left + right + 1) >> 1
155161
cnt := 0
@@ -164,6 +170,13 @@ func maxLength(ribbons []int, k int) int {
164170
}
165171
return left
166172
}
173+
174+
func max(a, b int) int {
175+
if a > b {
176+
return a
177+
}
178+
return b
179+
}
167180
```
168181

169182
### **JavaScript**
@@ -176,7 +189,7 @@ func maxLength(ribbons []int, k int) int {
176189
*/
177190
var maxLength = function (ribbons, k) {
178191
let left = 0;
179-
let right = 1e5;
192+
let right = Math.max(...ribbons);
180193
while (left < right) {
181194
const mid = (left + right + 1) >> 1;
182195
let cnt = 0;
@@ -198,7 +211,7 @@ var maxLength = function (ribbons, k) {
198211
```ts
199212
function maxLength(ribbons: number[], k: number): number {
200213
let left = 0;
201-
let right = 1e5;
214+
let right = Math.max(...ribbons);
202215
while (left < right) {
203216
const mid = (left + right + 1) >> 1;
204217
let cnt = 0;

solution/1800-1899/1891.Cutting Ribbons/README_EN.md

+19-6
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ Now you have 4 ribbons of length 4.
7272
```python
7373
class Solution:
7474
def maxLength(self, ribbons: List[int], k: int) -> int:
75-
left, right = 0, 100000
75+
left, right = 0, max(ribbons)
7676
while left < right:
7777
mid = (left + right + 1) >> 1
7878
cnt = sum(x // mid for x in ribbons)
@@ -88,7 +88,10 @@ class Solution:
8888
```java
8989
class Solution {
9090
public int maxLength(int[] ribbons, int k) {
91-
int left = 0, right = 100000;
91+
int left = 0, right = 0;
92+
for (int x : ribbons) {
93+
right = Math.max(right, x);
94+
}
9295
while (left < right) {
9396
int mid = (left + right + 1) >>> 1;
9497
int cnt = 0;
@@ -112,7 +115,7 @@ class Solution {
112115
class Solution {
113116
public:
114117
int maxLength(vector<int>& ribbons, int k) {
115-
int left = 0, right = 1e5;
118+
int left = 0, right = *max_element(ribbons.begin(), ribbons.end());
116119
while (left < right) {
117120
int mid = (left + right + 1) >> 1;
118121
int cnt = 0;
@@ -134,7 +137,10 @@ public:
134137
135138
```go
136139
func maxLength(ribbons []int, k int) int {
137-
left, right := 0, 100000
140+
left, right := 0, 0
141+
for _, x := range ribbons {
142+
right = max(right, x)
143+
}
138144
for left < right {
139145
mid := (left + right + 1) >> 1
140146
cnt := 0
@@ -149,6 +155,13 @@ func maxLength(ribbons []int, k int) int {
149155
}
150156
return left
151157
}
158+
159+
func max(a, b int) int {
160+
if a > b {
161+
return a
162+
}
163+
return b
164+
}
152165
```
153166

154167
### **JavaScript**
@@ -161,7 +174,7 @@ func maxLength(ribbons []int, k int) int {
161174
*/
162175
var maxLength = function (ribbons, k) {
163176
let left = 0;
164-
let right = 1e5;
177+
let right = Math.max(...ribbons);
165178
while (left < right) {
166179
const mid = (left + right + 1) >> 1;
167180
let cnt = 0;
@@ -183,7 +196,7 @@ var maxLength = function (ribbons, k) {
183196
```ts
184197
function maxLength(ribbons: number[], k: number): number {
185198
let left = 0;
186-
let right = 1e5;
199+
let right = Math.max(...ribbons);
187200
while (left < right) {
188201
const mid = (left + right + 1) >> 1;
189202
let cnt = 0;

solution/1800-1899/1891.Cutting Ribbons/Solution.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
class Solution {
22
public:
33
int maxLength(vector<int>& ribbons, int k) {
4-
int left = 0, right = 1e5;
4+
int left = 0, right = *max_element(ribbons.begin(), ribbons.end());
55
while (left < right) {
66
int mid = (left + right + 1) >> 1;
77
int cnt = 0;

solution/1800-1899/1891.Cutting Ribbons/Solution.go

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
func maxLength(ribbons []int, k int) int {
2-
left, right := 0, 100000
2+
left, right := 0, 0
3+
for _, x := range ribbons {
4+
right = max(right, x)
5+
}
36
for left < right {
47
mid := (left + right + 1) >> 1
58
cnt := 0
@@ -13,4 +16,11 @@ func maxLength(ribbons []int, k int) int {
1316
}
1417
}
1518
return left
19+
}
20+
21+
func max(a, b int) int {
22+
if a > b {
23+
return a
24+
}
25+
return b
1626
}

solution/1800-1899/1891.Cutting Ribbons/Solution.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
class Solution {
22
public int maxLength(int[] ribbons, int k) {
3-
int left = 0, right = 100000;
3+
int left = 0, right = 0;
4+
for (int x : ribbons) {
5+
right = Math.max(right, x);
6+
}
47
while (left < right) {
58
int mid = (left + right + 1) >>> 1;
69
int cnt = 0;

solution/1800-1899/1891.Cutting Ribbons/Solution.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*/
66
var maxLength = function (ribbons, k) {
77
let left = 0;
8-
let right = 1e5;
8+
let right = Math.max(...ribbons);
99
while (left < right) {
1010
const mid = (left + right + 1) >> 1;
1111
let cnt = 0;
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
class Solution:
22
def maxLength(self, ribbons: List[int], k: int) -> int:
3-
left, right = 0, 100000
3+
left, right = 0, max(ribbons)
44
while left < right:
55
mid = (left + right + 1) >> 1
66
cnt = sum(x // mid for x in ribbons)
77
if cnt >= k:
88
left = mid
99
else:
1010
right = mid - 1
11-
return left
11+
return left

solution/1800-1899/1891.Cutting Ribbons/Solution.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
function maxLength(ribbons: number[], k: number): number {
22
let left = 0;
3-
let right = 1e5;
3+
let right = Math.max(...ribbons);
44
while (left < right) {
55
const mid = (left + right + 1) >> 1;
66
let cnt = 0;

0 commit comments

Comments
 (0)