- 调整数组元素顺序:小的在中间,大的在两边。两边的数用到的次数最多。
- 计算和,计算时两个for会超时。换思路,根据元素出现次数计算,一次for搞定。
package main
import (
"fmt"
"sort"
)
func main() {
var n int
fmt.Scan(&n)
a := make([]int, n)
for i := range a {
fmt.Scan(&a[i])
}
sort.Sort(sort.Reverse(sort.IntSlice(a)))
ranged := make([]int, n)
left, right := 0, n-1
for i := 0; i < n; i++ {
if i%2 == 0 {
ranged[left] = a[i]
left++
} else {
ranged[right] = a[i]
right--
}
}
result := 0
left, right = 0, n-1
count := 1
for left <= right {
result += ranged[left] * n * count
if left != right {
result += ranged[right] * n * count
}
n--
count++
left++
right--
}
fmt.Println(result)
}
#小红书笔试#