描述:
迈克 负责下肉,下肉的个数为 n个,n>=1
汤姆 负责吃,吃肉的速率是m秒,(每次只能吃一块肉) m<=1000
(x,y)
x 表示 肉在第x秒下锅,
y 表示 肉下锅过y秒最美味(即汤姆吃到最合适)
题目实例:
n:3 m:1
后三行,代表x,y的数组
1 2
1 3
2 3
解题思路:
画个时间轴,题目就迎刃而解了
编号
A 1 2
B 1 3
C 2 3
可以接续加,调试时,需要验证
C
v----------------v
B
v----------------v
A
v----------v
|___|___|___|___|___|___|___|___|___|___|__>
0 1 2 3 4 5 6 7 8 9 10
D
v----------v
从上图可以看出,这是一道,闭区间去重的问题(区间右点和汤姆吃肉时间点一致,即可记录这个区间点)
但题目有不严谨的地方。
1、从A B 看,同一时间点,可以下多块肉;
2、同一时间点,不能即下肉又捞肉??
实时上,再我加了D: 4 2 后
系统结果是3,而不是4!!?? wtf。。
package main
import (
"fmt"
)
func main() {
list := []*St{{1, 2}, {1, 3}, {2, 3}, {4, 2}}
res := CreateFunc(3, 1, list)
fmt.Println(res)
}
type St struct {
x int
y int
}
func uniqueInts(a []int) (b []int) {
m := map[int]bool{}
for _, v := range a {
if _, ok := m[v]; !ok {
b = append(b, v)
m[v] = true
}
}
return b
}
func parseList(goal int, putList []int) bool {
for _, p := range putList {
if p == goal {
return true
}
}
return false
}
func CreateFunc(totalNum, speed int, list []*St) int {
var goalList []int
var putList []int
for _, v := range list {
time := v.x + v.y
if time%speed == 0 {
goalList = append(goalList, time)
putList = append(putList, v.x)
}
}
goalList = uniqueInts(goalList)
var goalFinalList []int
for _, v := range goalList {
if parseList(v, putList) {
continue
} else {
goalFinalList = append(goalFinalList, v)
}
}
return len(goalFinalList)
}