Skip to content

Commit b469947

Browse files
committed
feat: add solutions to lc problem: No.1283
No.1283.Find the Smallest Divisor Given a Threshold
1 parent 3ef01ae commit b469947

File tree

8 files changed

+220
-101
lines changed

8 files changed

+220
-101
lines changed

solution/1200-1299/1283.Find the Smallest Divisor Given a Threshold/README.md

Lines changed: 62 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,10 @@
6464
```python
6565
class Solution:
6666
def smallestDivisor(self, nums: List[int], threshold: int) -> int:
67-
left, right = 1, 1000000
67+
left, right = 1, 10**6
6868
while left < right:
6969
mid = (left + right) >> 1
70-
s = 0
71-
for num in nums:
72-
s += (num + mid - 1) // mid
70+
s = sum((v + mid - 1) // mid for v in nums)
7371
if s <= threshold:
7472
right = mid
7573
else:
@@ -88,8 +86,8 @@ class Solution {
8886
while (left < right) {
8987
int mid = (left + right) >> 1;
9088
int s = 0;
91-
for (int num : nums) {
92-
s += (num + mid - 1) / mid;
89+
for (int v : nums) {
90+
s += (v + mid - 1) / mid;
9391
}
9492
if (s <= threshold) {
9593
right = mid;
@@ -108,18 +106,14 @@ class Solution {
108106
class Solution {
109107
public:
110108
int smallestDivisor(vector<int>& nums, int threshold) {
111-
int left = 1, right = 1000000;
112-
while (left < right) {
113-
int mid = left + right >> 1;
109+
int left = 1, right = 1e6;
110+
while (left < right)
111+
{
112+
int mid = (left + right) >> 1;
114113
int s = 0;
115-
for (int& num : nums) {
116-
s += (num + mid - 1) / mid;
117-
}
118-
if (s <= threshold) {
119-
right = mid;
120-
} else {
121-
left = mid + 1;
122-
}
114+
for (int& v : nums) s += (v + mid - 1) / mid;
115+
if (s <= threshold) right = mid;
116+
else left = mid + 1;
123117
}
124118
return left;
125119
}
@@ -134,8 +128,8 @@ func smallestDivisor(nums []int, threshold int) int {
134128
for left < right {
135129
mid := (left + right) >> 1
136130
s := 0
137-
for _, num := range nums {
138-
s += (num + mid - 1) / mid
131+
for _, v := range nums {
132+
s += (v + mid - 1) / mid
139133
}
140134
if s <= threshold {
141135
right = mid
@@ -147,6 +141,55 @@ func smallestDivisor(nums []int, threshold int) int {
147141
}
148142
```
149143

144+
### **JavaScript**
145+
146+
```js
147+
/**
148+
* @param {number[]} nums
149+
* @param {number} threshold
150+
* @return {number}
151+
*/
152+
var smallestDivisor = function (nums, threshold) {
153+
let left = 1,
154+
right = 1000000;
155+
while (left < right) {
156+
const mid = (left + right) >> 1;
157+
let s = 0;
158+
for (let v of nums) {
159+
s += Math.ceil(v / mid);
160+
}
161+
if (s <= threshold) {
162+
right = mid;
163+
} else {
164+
left = mid + 1;
165+
}
166+
}
167+
return left;
168+
};
169+
```
170+
171+
### **TypeScript**
172+
173+
```ts
174+
function smallestDivisor(nums: number[], threshold: number): number {
175+
let left = 1,
176+
right = 1000000;
177+
while (left < right) {
178+
const mid = (left + right) >> 1;
179+
let s = 0;
180+
for (let v of nums) {
181+
s += Math.ceil(v / mid);
182+
}
183+
if (s <= threshold) {
184+
right = mid;
185+
} else {
186+
left = mid + 1;
187+
}
188+
}
189+
return left;
190+
}
191+
```
192+
150193
### **...**
151194

152195
```

solution/1200-1299/1283.Find the Smallest Divisor Given a Threshold/README_EN.md

Lines changed: 62 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,10 @@ If the divisor is 4 we can get a sum of 7 (1+1+2+3) and if the divisor is 5 the
4545
```python
4646
class Solution:
4747
def smallestDivisor(self, nums: List[int], threshold: int) -> int:
48-
left, right = 1, 1000000
48+
left, right = 1, 10**6
4949
while left < right:
5050
mid = (left + right) >> 1
51-
s = 0
52-
for num in nums:
53-
s += (num + mid - 1) // mid
51+
s = sum((v + mid - 1) // mid for v in nums)
5452
if s <= threshold:
5553
right = mid
5654
else:
@@ -67,8 +65,8 @@ class Solution {
6765
while (left < right) {
6866
int mid = (left + right) >> 1;
6967
int s = 0;
70-
for (int num : nums) {
71-
s += (num + mid - 1) / mid;
68+
for (int v : nums) {
69+
s += (v + mid - 1) / mid;
7270
}
7371
if (s <= threshold) {
7472
right = mid;
@@ -87,18 +85,14 @@ class Solution {
8785
class Solution {
8886
public:
8987
int smallestDivisor(vector<int>& nums, int threshold) {
90-
int left = 1, right = 1000000;
91-
while (left < right) {
92-
int mid = left + right >> 1;
88+
int left = 1, right = 1e6;
89+
while (left < right)
90+
{
91+
int mid = (left + right) >> 1;
9392
int s = 0;
94-
for (int& num : nums) {
95-
s += (num + mid - 1) / mid;
96-
}
97-
if (s <= threshold) {
98-
right = mid;
99-
} else {
100-
left = mid + 1;
101-
}
93+
for (int& v : nums) s += (v + mid - 1) / mid;
94+
if (s <= threshold) right = mid;
95+
else left = mid + 1;
10296
}
10397
return left;
10498
}
@@ -113,8 +107,8 @@ func smallestDivisor(nums []int, threshold int) int {
113107
for left < right {
114108
mid := (left + right) >> 1
115109
s := 0
116-
for _, num := range nums {
117-
s += (num + mid - 1) / mid
110+
for _, v := range nums {
111+
s += (v + mid - 1) / mid
118112
}
119113
if s <= threshold {
120114
right = mid
@@ -126,6 +120,55 @@ func smallestDivisor(nums []int, threshold int) int {
126120
}
127121
```
128122

123+
### **JavaScript**
124+
125+
```js
126+
/**
127+
* @param {number[]} nums
128+
* @param {number} threshold
129+
* @return {number}
130+
*/
131+
var smallestDivisor = function (nums, threshold) {
132+
let left = 1,
133+
right = 1000000;
134+
while (left < right) {
135+
const mid = (left + right) >> 1;
136+
let s = 0;
137+
for (let v of nums) {
138+
s += Math.ceil(v / mid);
139+
}
140+
if (s <= threshold) {
141+
right = mid;
142+
} else {
143+
left = mid + 1;
144+
}
145+
}
146+
return left;
147+
};
148+
```
149+
150+
### **TypeScript**
151+
152+
```ts
153+
function smallestDivisor(nums: number[], threshold: number): number {
154+
let left = 1,
155+
right = 1000000;
156+
while (left < right) {
157+
const mid = (left + right) >> 1;
158+
let s = 0;
159+
for (let v of nums) {
160+
s += Math.ceil(v / mid);
161+
}
162+
if (s <= threshold) {
163+
right = mid;
164+
} else {
165+
left = mid + 1;
166+
}
167+
}
168+
return left;
169+
}
170+
```
171+
129172
### **...**
130173

131174
```
Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,15 @@
1-
class Solution {
2-
public:
3-
int smallestDivisor(vector<int>& nums, int threshold) {
4-
int left = 1, right = 1000000;
5-
while (left < right) {
6-
int mid = left + right >> 1;
7-
int s = 0;
8-
for (int& num : nums) {
9-
s += (num + mid - 1) / mid;
10-
}
11-
if (s <= threshold) {
12-
right = mid;
13-
} else {
14-
left = mid + 1;
15-
}
16-
}
17-
return left;
18-
}
1+
class Solution {
2+
public:
3+
int smallestDivisor(vector<int>& nums, int threshold) {
4+
int left = 1, right = 1e6;
5+
while (left < right)
6+
{
7+
int mid = (left + right) >> 1;
8+
int s = 0;
9+
for (int& v : nums) s += (v + mid - 1) / mid;
10+
if (s <= threshold) right = mid;
11+
else left = mid + 1;
12+
}
13+
return left;
14+
}
1915
};
Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
func smallestDivisor(nums []int, threshold int) int {
2-
left, right := 1, 1000000
3-
for left < right {
4-
mid := (left + right) >> 1
5-
s := 0
6-
for _, num := range nums {
7-
s += (num + mid - 1) / mid
8-
}
9-
if s <= threshold {
10-
right = mid
11-
} else {
12-
left = mid + 1
13-
}
14-
}
15-
return left
1+
func smallestDivisor(nums []int, threshold int) int {
2+
left, right := 1, 1000000
3+
for left < right {
4+
mid := (left + right) >> 1
5+
s := 0
6+
for _, v := range nums {
7+
s += (v + mid - 1) / mid
8+
}
9+
if s <= threshold {
10+
right = mid
11+
} else {
12+
left = mid + 1
13+
}
14+
}
15+
return left
1616
}
Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
class Solution {
2-
public int smallestDivisor(int[] nums, int threshold) {
3-
int left = 1, right = 1000000;
4-
while (left < right) {
5-
int mid = (left + right) >> 1;
6-
int s = 0;
7-
for (int num : nums) {
8-
s += (num + mid - 1) / mid;
9-
}
10-
if (s <= threshold) {
11-
right = mid;
12-
} else {
13-
left = mid + 1;
14-
}
15-
}
16-
return left;
17-
}
1+
class Solution {
2+
public int smallestDivisor(int[] nums, int threshold) {
3+
int left = 1, right = 1000000;
4+
while (left < right) {
5+
int mid = (left + right) >> 1;
6+
int s = 0;
7+
for (int v : nums) {
8+
s += (v + mid - 1) / mid;
9+
}
10+
if (s <= threshold) {
11+
right = mid;
12+
} else {
13+
left = mid + 1;
14+
}
15+
}
16+
return left;
17+
}
1818
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} threshold
4+
* @return {number}
5+
*/
6+
var smallestDivisor = function (nums, threshold) {
7+
let left = 1,
8+
right = 1000000;
9+
while (left < right) {
10+
const mid = (left + right) >> 1;
11+
let s = 0;
12+
for (let v of nums) {
13+
s += Math.ceil(v / mid);
14+
}
15+
if (s <= threshold) {
16+
right = mid;
17+
} else {
18+
left = mid + 1;
19+
}
20+
}
21+
return left;
22+
};
Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1-
class Solution:
2-
def smallestDivisor(self, nums: List[int], threshold: int) -> int:
3-
left, right = 1, 1000000
4-
while left < right:
5-
mid = (left + right) >> 1
6-
s = 0
7-
for num in nums:
8-
s += (num + mid - 1) // mid
9-
if s <= threshold:
10-
right = mid
11-
else:
12-
left = mid + 1
13-
return left
1+
class Solution:
2+
def smallestDivisor(self, nums: List[int], threshold: int) -> int:
3+
left, right = 1, 10**6
4+
while left < right:
5+
mid = (left + right) >> 1
6+
s = sum((v + mid - 1) // mid for v in nums)
7+
if s <= threshold:
8+
right = mid
9+
else:
10+
left = mid + 1
11+
return left

0 commit comments

Comments
 (0)