美团笔试第一题就超时??
题目是n个长方形,我用go写的,一开始超时后改用hash缓存后还超时,真一点没招了,牛友们有遇到相同情况吗
这是我的代码:
package main
import "fmt"
func niceput(rectangles [][]int, height int) int {
var ans int
for _, rectangle := range rectangles {
if rectangle[0] <= height && rectangle[1] <= height {
ans += min(rectangle[0], rectangle[1])
} else {
if rectangle[0] > height {
ans += rectangle[0]
} else {
ans += rectangle[1]
}
}
}
return ans
}
func min(a, b int) int {
if a <= b {
return a
}
return b
}
func main() {
firstmap := make(map[int]map[int]int)
var n, m int
fmt.Scan(&n, &m)
ans := 0
for i := 0; i < n; i++ {
recs := [][]int{}
var x, y int
fmt.Scan(&x, &y)
if x < y {
x, y = y, x
}
//如果map中有结果,直接调用,不用再计算一次
if v, ok := firstmap[x][y]; ok {
ans += v
continue
}
recs = append(recs, []int{x, y})
curput := niceput(recs, m)
ans += curput
if _, ok := firstmap[x]; !ok {
firstmap[x] = make(map[int]int)
}
firstmap[x][y] = curput
//把结果记录在map中
}
fmt.Println(ans)
}#牛客AI配图神器#
这是我的代码:
package main
import "fmt"
func niceput(rectangles [][]int, height int) int {
var ans int
for _, rectangle := range rectangles {
if rectangle[0] <= height && rectangle[1] <= height {
ans += min(rectangle[0], rectangle[1])
} else {
if rectangle[0] > height {
ans += rectangle[0]
} else {
ans += rectangle[1]
}
}
}
return ans
}
func min(a, b int) int {
if a <= b {
return a
}
return b
}
func main() {
firstmap := make(map[int]map[int]int)
var n, m int
fmt.Scan(&n, &m)
ans := 0
for i := 0; i < n; i++ {
recs := [][]int{}
var x, y int
fmt.Scan(&x, &y)
if x < y {
x, y = y, x
}
//如果map中有结果,直接调用,不用再计算一次
if v, ok := firstmap[x][y]; ok {
ans += v
continue
}
recs = append(recs, []int{x, y})
curput := niceput(recs, m)
ans += curput
if _, ok := firstmap[x]; !ok {
firstmap[x] = make(map[int]int)
}
firstmap[x][y] = curput
//把结果记录在map中
}
fmt.Println(ans)
}#牛客AI配图神器#
全部评论

A 了这题,用 python 写的。如果没有超过最大高度,就用最小的当底,如果超过了最大高度,就用最大的当底
其实是输入有问题,用scanner输入就不超时了
C语言写的,用指针结构体+枚举,2ms左右
一样超时,一开始过20%,后面调了调变量定义位置这些的(没改逻辑),过90,不知道怎么往上调了😓
我int改long就从0到100了,cpp
感觉有点问题,这个一直0通过,明明很简单
相关推荐
当个老六冲哈:接好运

点赞 评论 收藏
分享