-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
52 lines (42 loc) · 828 Bytes
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package main
import (
"fmt"
"sort"
)
func main() {
fmt.Println("Hello world")
}
func maximumCoins(heroes []int, monsters []int, coins []int) []int64 {
comb := make([][2]int, 0, len(monsters))
for i, v := range monsters {
comb = append(comb, [2]int{v, coins[i]})
}
sort.Slice(comb, func(i, j int) bool {
return comb[i][0] < comb[j][0]
})
ps := make([]int, len(comb))
ps[0] = comb[0][1]
for i := 1; i < len(ps); i++ {
ps[i] += ps[i-1] + comb[i][1]
}
result := make([]int64, len(heroes))
for i := 0; i < len(heroes); i++ {
pos := getPos(comb, heroes[i])
if pos != -1 {
result[i] = int64(ps[pos])
}
}
return result
}
func getPos(arr [][2]int, st int) int {
l, r := -1, len(arr)
for r-l > 1 {
mid := (l + r) / 2
if arr[mid][0] > st {
r = mid
} else {
l = mid
}
}
return l
}