两个硬肝的代码,很遗憾超时了,后面再去优化吧。
代码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
}
}
}
}
//也不懂一些优化的算法,算是最基础的思路,后面再刷的时候进行优化
两个代码几乎思路相同,对于我这种新手很好理解,哈哈,算了菜鸡小计吧。