1792. 最大平均通过率-golang

两个硬肝的代码,很遗憾超时了,后面再去优化吧。
代码1:

func maxAverageRatio(classes [][]int, extraStudents int) float64 {
	var res float64
	for i := 0; i < extraStudents; i++ {
		maxClass(classes)
	}
	for _, val := range classes {
		res = res + (float64(val[0]) / float64(val[1]))
	}
	return res / float64(len(classes))

}

func maxClass(class [][]int) {
	var score, res float64

	var idxClass int
	for i := 0; i < len(class); i++ {

		score = float64(class[i][0]+1)/float64(class[i][1]+1) - (float64(class[i][0]) / float64(class[i][1]))
		if score > res {
			res = score
			idxClass = i
		}
	}
	class[idxClass][0] = class[idxClass][0] + 1
	class[idxClass][1] = class[idxClass][1] + 1
}
//超时

代码2:

func maxAverageRatio(classes [][]int, extraStudents int) float64 {
	var res, res0 float64
	classScore := make([][]float64, 0, len(classes))
	for i := 0; i < len(classes); i++ {
		res0 = res0 + float64(classes[i][0])/float64(classes[i][1])
		classScore = append(classScore, []float64{float64(i), float64(classes[i][0]+1)/float64(classes[i][1]+1) - (float64(classes[i][0]) / float64(classes[i][1]))})
	}
	order(classScore)
	for i := 0; i < extraStudents; i++ {
		index := int(classScore[0][0])
		res = res + classScore[0][1]
		classes[index][1]++
		classes[index][0]++
		classScore[0][1] = float64(classes[index][0]+1)/float64(classes[index][1]+1) - float64(classes[index][0])/float64(classes[index][1])
		order(classScore)
	}
	return (res + res0) / float64(len(classes))
}
//排序
func order(score [][]float64) {
	for i := 0; i < len(score); i++ {
		for j := i + 1; j < len(score); j++ {
			if score[i][1] < score[j][1] {
				temp := score[i]
				score[i] = score[j]
				score[j] = temp
			}
		}
	}
}
//也不懂一些优化的算法,算是最基础的思路,后面再刷的时候进行优化

两个代码几乎思路相同,对于我这种新手很好理解,哈哈,算了菜鸡小计吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值