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
| // @Title: 得分最高的最小轮调 (Smallest Rotation with Highest Score)
// @Author: 15816537946@163.com
// @Date: 2022-03-09 17:46:47
// @Runtime: 108 ms
// @Memory: 9.2 MB
func bestRotation(nums []int) int {
n := len(nums)
diffs := make([]int, n)
for i, num := range nums {
low := (i + 1) % n
high := (i - num + n + 1) % n
diffs[low]++
diffs[high]--
if low >= high {
diffs[0]++
}
}
score, maxScore, idx := 0, 0, 0
for i, diff := range diffs {
score += diff
if score > maxScore {
maxScore, idx = score, i
}
}
return idx
}
|