-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path6017-minimalKSum.go
74 lines (71 loc) · 1.33 KB
/
6017-minimalKSum.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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// https://leetcode-cn.com/problems/append-k-integers-with-minimal-sum/
package main
import (
"fmt"
"sort"
)
/**
* 先用排序,再根据排序补充数据
*/
func minimalKSum(nums []int, k int) int64 {
sort.Ints(nums)
fmt.Println(nums)
var ret int64 = 0
for i := 0; i < len(nums); i++ {
if i == 0 {
if k < nums[i] {
return int64((1 + k) * k / 2)
}
ret = int64(nums[i] * (nums[i] - 1) / 2)
k -= (nums[i] - 1)
} else {
if nums[i]-nums[i-1] <= 1 {
continue
}
if k < nums[i]-nums[i-1]-1 {
ret += int64((nums[i-1]*2 + k + 1) * k / 2)
k = 0
} else {
ret += int64((nums[i-1] + 1 + nums[i] - 1) * (nums[i] - nums[i-1] - 1) / 2)
k -= nums[i] - nums[i-1] - 1
}
}
fmt.Println(ret)
if k == 0 {
break
}
}
if k != 0 {
last := nums[len(nums)-1]
ret += int64((last + 1 + last + k) * k / 2)
}
return ret
/*
* 没用排序,超时了
*
m := map[int64]int{}
min := nums[0]
for _, num := range nums {
m[int64(num)]++
if num < min {
min = num
}
}
var ret int64 = 0
if k < min {
return int64((1+k)*k/2)
} else {
ret = int64(min*(min-1)/2)
k -= (min-1)
}
var i int64 = int64(min+1)
for ; k > 0; i++ {
if _,ok := m[i]; ok {
continue
} else {
ret += i
k--
}
}
return ret*/
}