Skip to content

Commit e587e46

Browse files
committed
2300: add sol in go
Signed-off-by: ductnn <[email protected]>
1 parent 099e0f7 commit e587e46

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

leetcode/daily/2300/sol.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
// https://leetcode.com/problems/successful-pairs-of-spells-and-potions
2+
3+
package main
4+
5+
import (
6+
"fmt"
7+
"sort"
8+
)
9+
10+
func successfulPairs(spells []int, potions []int, success int64) []int {
11+
sort.Ints(potions)
12+
m := len(spells)
13+
n := len(potions)
14+
15+
result := make([]int, m)
16+
for i := 0; i < m; i++ {
17+
left, right := 0, n
18+
for left < right {
19+
mid := left + (right-left)>>1
20+
if int64(potions[mid]*spells[i]) >= success {
21+
right = mid
22+
} else {
23+
left = mid + 1
24+
}
25+
}
26+
result[i] = n - left
27+
}
28+
return result
29+
}
30+
31+
func successfulPairs1(spells []int, potions []int, success int64) []int {
32+
sort.Ints(potions)
33+
m := len(spells)
34+
n := len(potions)
35+
36+
result := make([]int, m)
37+
for i := 0; i < m; i++ {
38+
temp := binarySearch(potions, spells[i], int(success))
39+
result[i] = n - temp
40+
}
41+
return result
42+
}
43+
44+
func binarySearch(nums []int, temp, success int) int {
45+
left, right := 0, len(nums)
46+
for left < right {
47+
mid := left + (right-left)>>1
48+
if nums[mid]*temp >= success {
49+
right = mid
50+
} else {
51+
left = mid + 1
52+
}
53+
}
54+
55+
return right
56+
}
57+
58+
func main() {
59+
spells := []int{5, 1, 3}
60+
potions := []int{1, 2, 3, 4, 5}
61+
success := 7
62+
63+
fmt.Println(successfulPairs1(spells, potions, int64(success)))
64+
}

0 commit comments

Comments
 (0)