小红书第二题AK-区间和之和


  1. 调整数组元素顺序:小的在中间,大的在两边。两边的数用到的次数最多。
  2. 计算和,计算时两个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)
}

#小红书笔试#
全部评论

相关推荐

03-15 10:59
已编辑
美团_后端开发(实习员工)
爱写代码的菜code...:哎,自己当时拿到字节offer的时候也在感叹终于拿到了,自己当时最想去的企业就是字节,结果还是阴差阳错去了鹅厂。祝uu一切顺利!!!
点赞 评论 收藏
分享
求问!考研下岸,打算参加春招,我这个bg能进啥厂,或者需要搞点深度项目再投吗
Java抽象带篮子_...:直接海投,可以看看我的考研失利速成冲春招贴,里面详细写了简历怎么写,学哪些项目可以速成
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务