字节面试官自爆:掌握这道LeetCode算法题,算法面基本稳了!

字节跳动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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值