字节跳动2021面试题:食物集合
描述
给定一个长度为n个二元组数组lunch表示午餐食物集合,其中lunch[i][0]表示第i种食物的热量,lunch[i][1]表示第i种食物的美味程度
再给定一个长度为m个二元组数组dinner表示晚餐食物集合,其中dinner[i][0]表示第i种食物的热量,dinner[i][1]表示第i种食物的美味程度
请你在午餐集合和晚餐集合各自选取至多一个食物,在满足总的美味程度不小于T的前提下,返回摄入最少的热量和。
1≤n,m≤105
1≤lunch[i][0],lunch[i][1],dinner[i][0],dinner[i][1]≤105
如果不能满足条件则返回’-1’(不包括空格)
样例1
输入:[[10,10],[20,20]]
[[20,30],[30,30]]
40
输出:30
解释:可以选出吃午餐的第0个食物和晚餐的第0个食物,美味程度为40,摄入热量为30
解题思路
双指针
把午餐按照美味程度从高到低排列, 把晚餐按照热量从低到高排列。 那么我们知道, 如果午餐+晚餐的美味程度如果不够的话, 就算增加午餐的index, 那么只会更加不够。 所以这个之后要增加晚餐的index了。 就这么双指针移动下去就解决了。 另外还要特别注意只吃午餐或者只吃晚餐的情况。
源代码
class Solution