Skip to content

Commit b6fc338

Browse files
committed
feat: add solutions to lc problems: No.2605~2607
* No.2605.Form Smallest Number From Two Digit Arrays * No.2606.Find the Substring With Maximum Cost * No.2607.Make K-Subarray Sums Equal
1 parent cc2f42f commit b6fc338

File tree

17 files changed

+546
-138
lines changed

17 files changed

+546
-138
lines changed

solution/2600-2699/2605.Form Smallest Number From Two Digit Arrays/README.md

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,100 @@ func min(a, b int) int {
330330
}
331331
```
332332

333+
### **TypeScript**
334+
335+
```ts
336+
function minNumber(nums1: number[], nums2: number[]): number {
337+
let ans = 100;
338+
for (const a of nums1) {
339+
for (const b of nums2) {
340+
if (a == b) {
341+
ans = Math.min(ans, a);
342+
} else {
343+
ans = Math.min(ans, a * 10 + b, b * 10 + a);
344+
}
345+
}
346+
}
347+
return ans;
348+
}
349+
```
350+
351+
```ts
352+
function minNumber(nums1: number[], nums2: number[]): number {
353+
const s1: boolean[] = new Array(10).fill(false);
354+
const s2: boolean[] = new Array(10).fill(false);
355+
for (const x of nums1) {
356+
s1[x] = true;
357+
}
358+
for (const x of nums2) {
359+
s2[x] = true;
360+
}
361+
let a = 0;
362+
let b = 0;
363+
for (let i = 1; i < 10; ++i) {
364+
if (s1[i] && s2[i]) {
365+
return i;
366+
}
367+
if (a == 0 && s1[i]) {
368+
a = i;
369+
}
370+
if (b == 0 && s2[i]) {
371+
b = i;
372+
}
373+
}
374+
return Math.min(a * 10 + b, b * 10 + a);
375+
}
376+
```
377+
378+
```ts
379+
function minNumber(nums1: number[], nums2: number[]): number {
380+
let mask1: number = 0;
381+
let mask2: number = 0;
382+
for (const x of nums1) {
383+
mask1 |= 1 << x;
384+
}
385+
for (const x of nums2) {
386+
mask2 |= 1 << x;
387+
}
388+
const mask = mask1 & mask2;
389+
if (mask !== 0) {
390+
return numberOfTrailingZeros(mask);
391+
}
392+
const a = numberOfTrailingZeros(mask1);
393+
const b = numberOfTrailingZeros(mask2);
394+
return Math.min(a * 10 + b, b * 10 + a);
395+
}
396+
397+
function numberOfTrailingZeros(i: number): number {
398+
let y = 0;
399+
if (i === 0) {
400+
return 32;
401+
}
402+
let n = 31;
403+
y = i << 16;
404+
if (y != 0) {
405+
n = n - 16;
406+
i = y;
407+
}
408+
y = i << 8;
409+
if (y != 0) {
410+
n = n - 8;
411+
i = y;
412+
}
413+
y = i << 4;
414+
if (y != 0) {
415+
n = n - 4;
416+
i = y;
417+
}
418+
y = i << 2;
419+
if (y != 0) {
420+
n = n - 2;
421+
i = y;
422+
}
423+
return n - ((i << 1) >>> 31);
424+
}
425+
```
426+
333427
### **...**
334428

335429
```

solution/2600-2699/2605.Form Smallest Number From Two Digit Arrays/README_EN.md

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,100 @@ func min(a, b int) int {
300300
}
301301
```
302302

303+
### **TypeScript**
304+
305+
```ts
306+
function minNumber(nums1: number[], nums2: number[]): number {
307+
let ans = 100;
308+
for (const a of nums1) {
309+
for (const b of nums2) {
310+
if (a == b) {
311+
ans = Math.min(ans, a);
312+
} else {
313+
ans = Math.min(ans, a * 10 + b, b * 10 + a);
314+
}
315+
}
316+
}
317+
return ans;
318+
}
319+
```
320+
321+
```ts
322+
function minNumber(nums1: number[], nums2: number[]): number {
323+
const s1: boolean[] = new Array(10).fill(false);
324+
const s2: boolean[] = new Array(10).fill(false);
325+
for (const x of nums1) {
326+
s1[x] = true;
327+
}
328+
for (const x of nums2) {
329+
s2[x] = true;
330+
}
331+
let a = 0;
332+
let b = 0;
333+
for (let i = 1; i < 10; ++i) {
334+
if (s1[i] && s2[i]) {
335+
return i;
336+
}
337+
if (a == 0 && s1[i]) {
338+
a = i;
339+
}
340+
if (b == 0 && s2[i]) {
341+
b = i;
342+
}
343+
}
344+
return Math.min(a * 10 + b, b * 10 + a);
345+
}
346+
```
347+
348+
```ts
349+
function minNumber(nums1: number[], nums2: number[]): number {
350+
let mask1: number = 0;
351+
let mask2: number = 0;
352+
for (const x of nums1) {
353+
mask1 |= 1 << x;
354+
}
355+
for (const x of nums2) {
356+
mask2 |= 1 << x;
357+
}
358+
const mask = mask1 & mask2;
359+
if (mask !== 0) {
360+
return numberOfTrailingZeros(mask);
361+
}
362+
const a = numberOfTrailingZeros(mask1);
363+
const b = numberOfTrailingZeros(mask2);
364+
return Math.min(a * 10 + b, b * 10 + a);
365+
}
366+
367+
function numberOfTrailingZeros(i: number): number {
368+
let y = 0;
369+
if (i === 0) {
370+
return 32;
371+
}
372+
let n = 31;
373+
y = i << 16;
374+
if (y != 0) {
375+
n = n - 16;
376+
i = y;
377+
}
378+
y = i << 8;
379+
if (y != 0) {
380+
n = n - 8;
381+
i = y;
382+
}
383+
y = i << 4;
384+
if (y != 0) {
385+
n = n - 4;
386+
i = y;
387+
}
388+
y = i << 2;
389+
if (y != 0) {
390+
n = n - 2;
391+
i = y;
392+
}
393+
return n - ((i << 1) >>> 31);
394+
}
395+
```
396+
303397
### **...**
304398

305399
```
Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
class Solution {
22
public:
33
int minNumber(vector<int>& nums1, vector<int>& nums2) {
4-
int ans = 100;
5-
for (int a : nums1) {
6-
for (int b : nums2) {
7-
if (a == b) {
8-
ans = min(ans, a);
9-
} else {
10-
ans = min({ans, a * 10 + b, b * 10 + a});
11-
}
12-
}
4+
int mask1 = 0, mask2 = 0;
5+
for (int x : nums1) {
6+
mask1 |= 1 << x;
137
}
14-
return ans;
8+
for (int x : nums2) {
9+
mask2 |= 1 << x;
10+
}
11+
int mask = mask1 & mask2;
12+
if (mask) {
13+
return __builtin_ctz(mask);
14+
}
15+
int a = __builtin_ctz(mask1);
16+
int b = __builtin_ctz(mask2);
17+
return min(a * 10 + b, b * 10 + a);
1518
}
1619
};

solution/2600-2699/2605.Form Smallest Number From Two Digit Arrays/Solution.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
func minNumber(nums1 []int, nums2 []int) int {
2-
ans := 100
3-
for _, a := range nums1 {
4-
for _, b := range nums2 {
5-
if a == b {
6-
ans = min(ans, a)
7-
} else {
8-
ans = min(ans, min(a*10+b, b*10+a))
9-
}
10-
}
2+
var mask1, mask2 uint
3+
for _, x := range nums1 {
4+
mask1 |= 1 << x
115
}
12-
return ans
6+
for _, x := range nums2 {
7+
mask2 |= 1 << x
8+
}
9+
if mask := mask1 & mask2; mask != 0 {
10+
return bits.TrailingZeros(mask)
11+
}
12+
a, b := bits.TrailingZeros(mask1), bits.TrailingZeros(mask2)
13+
return min(a*10+b, b*10+a)
1314
}
1415

1516
func min(a, b int) int {
Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
class Solution {
22
public int minNumber(int[] nums1, int[] nums2) {
3-
int ans = 100;
4-
for (int a : nums1) {
5-
for (int b : nums2) {
6-
if (a == b) {
7-
ans = Math.min(ans, a);
8-
} else {
9-
ans = Math.min(ans, Math.min(a * 10 + b, b * 10 + a));
10-
}
11-
}
3+
int mask1 = 0, mask2 = 0;
4+
for (int x : nums1) {
5+
mask1 |= 1 << x;
126
}
13-
return ans;
7+
for (int x : nums2) {
8+
mask2 |= 1 << x;
9+
}
10+
int mask = mask1 & mask2;
11+
if (mask != 0) {
12+
return Integer.numberOfTrailingZeros(mask);
13+
}
14+
int a = Integer.numberOfTrailingZeros(mask1);
15+
int b = Integer.numberOfTrailingZeros(mask2);
16+
return Math.min(a * 10 + b, b * 10 + a);
1417
}
1518
}
Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
class Solution:
22
def minNumber(self, nums1: List[int], nums2: List[int]) -> int:
3-
ans = 100
4-
for a in nums1:
5-
for b in nums2:
6-
if a == b:
7-
ans = min(ans, a)
8-
else:
9-
ans = min(ans, 10 * a + b, 10 * b + a)
10-
return ans
3+
mask1 = mask2 = 0
4+
for x in nums1:
5+
mask1 |= 1 << x
6+
for x in nums2:
7+
mask2 |= 1 << x
8+
mask = mask1 & mask2
9+
if mask:
10+
return (mask & -mask).bit_length() - 1
11+
a = (mask1 & -mask1).bit_length() - 1
12+
b = (mask2 & -mask2).bit_length() - 1
13+
return min(a * 10 + b, b * 10 + a)
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
function minNumber(nums1: number[], nums2: number[]): number {
2+
let mask1: number = 0;
3+
let mask2: number = 0;
4+
for (const x of nums1) {
5+
mask1 |= 1 << x;
6+
}
7+
for (const x of nums2) {
8+
mask2 |= 1 << x;
9+
}
10+
const mask = mask1 & mask2;
11+
if (mask !== 0) {
12+
return numberOfTrailingZeros(mask);
13+
}
14+
const a = numberOfTrailingZeros(mask1);
15+
const b = numberOfTrailingZeros(mask2);
16+
return Math.min(a * 10 + b, b * 10 + a);
17+
}
18+
19+
function numberOfTrailingZeros(i: number): number {
20+
let y = 0;
21+
if (i === 0) {
22+
return 32;
23+
}
24+
let n = 31;
25+
y = i << 16;
26+
if (y != 0) {
27+
n = n - 16;
28+
i = y;
29+
}
30+
y = i << 8;
31+
if (y != 0) {
32+
n = n - 8;
33+
i = y;
34+
}
35+
y = i << 4;
36+
if (y != 0) {
37+
n = n - 4;
38+
i = y;
39+
}
40+
y = i << 2;
41+
if (y != 0) {
42+
n = n - 2;
43+
i = y;
44+
}
45+
return n - ((i << 1) >>> 31);
46+
}

0 commit comments

Comments
 (0)