题意

给定一个数字,里面是每个人的level,每次可以处理同一个level的2个或者3个任务。求出最小的处理次数。

思路

要求次数最小,那么肯定是每次尽可能多的处理任务。如果某个level的任务只有1个,那么就直接返回-1.

其他的情况就是,如果某个level的任务数量a是3的倍数,那么就直接+a/3即可。

对于a%3=1的情况,例如4 = 2+2, 7 = 3+2+2, 10 = 3+3+2+2 所以次数= (a-4)/3+2

对于a%3=3的情况,例如5=3+2, 8 = 3+3+2, 11=3+3+3+2所以次数 = a/3+1

实现代码如下

func minimumRounds(tasks []int) int {
	taskLevel := make(map[int]int)
	for _, t := range tasks {
		taskLevel[t]++
	}
	rounds := 0

	for _, count := range taskLevel {
		if count == 1 {
			return -1
		}
		cond := count % 3
		if cond == 0 {
			rounds += count / 3
			continue
		}
		// 4(2+2), 7(3+2+2), 10(3+3+2+2), 13(3+3+3+2+2)
		if cond == 1 {
			rounds += (count-4)/3 + 2
			continue
		}
		// 5(3+2), 8(3+3+2), 11(3+3+3+2)
		rounds += count/3 + 1
	}
	return rounds
}