来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/fair-candy-swap

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

假设爱丽丝的i盒糖果和鲍勃的j盒糖果已按糖果数量有序排列,aliceSizes[i]<aliceSizes[i+1] bobSizes[j]<bobSizes[j+1]
任取爱丽丝的一盒糖果aliceSizes[x],是否一定会有一盒糖果与之对应?(交换这样的两盒糖果后,两人的糖果数量相同)
一定会有一盒这样的糖果,但鲍勃有没有就不一定了
思路如下:

爱丽丝的糖果总数为:aliceSum
鲍勃的糖果总数为:bobSum
两人总的糖果数量:allSum
如果爱丽丝拿出aliceSizes[i]与鲍勃换,那我们期望鲍勃拿出一盒糖果数量为allSum/2-(aliceSum-aliceSizes[i])的来交换
如果鲍勃没有这样的一盒糖果,说明爱丽丝不能用aliceSizes[i]来交换,爱丽丝只能试试换下一盒糖果
题目保证一定有解,所以最终至少会找到一种换法
鲍勃与之对应交换的这盒糖果可以用二分来找(我们已经对两人的每盒糖果按数量进行排序)

代码如下:

class Solution {
public:
vector<int> fairCandySwap(vector<int>& aliceSizes, vector<int>& bobSizes) {
vector<int> res;
int sum1=0,sum2=0; sort(aliceSizes.begin(),aliceSizes.end());
sort(bobSizes.begin(),bobSizes.end()); for(int i=0;i<aliceSizes.size() || i<bobSizes.size();i++){
if(i<aliceSizes.size())sum1+=aliceSizes[i];
if(i<bobSizes.size())sum2+=bobSizes[i];
}
for(int i=0;i<aliceSizes.size();i++){
int l=0,r=bobSizes.size()-1,mid,target = (sum1+sum2)/2-(sum1-aliceSizes[i]);
while(l<r){
mid = (l+r)/2;
if(bobSizes[mid]>=target)r=mid;
else l=mid+1;
}
if(bobSizes[l]==target){
res.push_back(aliceSizes[i]);
res.push_back(bobSizes[l]);
break;
}
} return res;
}
};

888. 公平的糖果交换--LeetCode的更多相关文章

  1. [Swift]LeetCode888. 公平的糖果交换 | Fair Candy Swap

    Alice and Bob have candy bars of different sizes: A[i] is the size of the i-th bar of candy that Ali ...

  2. Leetcode888.Fair Candy Swap公平的糖果交换

    爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 块糖的大小,B[j] 是鲍勃拥有的第 j 块糖的大小. 因为他们是朋友,所以他们想交换一个糖果棒,这样交换后,他们都有相同的糖果总量.( ...

  3. 【LeetCode】888. Fair Candy Swap 公平的糖果棒交换(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人公众号: 每日算法题 本文关键词:力扣,LeetCode,算法题,算法,Python 目录 题目描述 题目大意 解题方法 代码 刷题心得 关于作 ...

  4. [LeetCode] 888. Fair Candy Swap 公平糖果交换

    Alice and Bob have candy bars of different sizes: A[i] is the size of the i-th bar of candy that Ali ...

  5. LeetCode.888-公平的糖果交换(Fair Candy Swap)

    这是悦乐书的第339次更新,第363篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第208题(顺位题号是888).Alice和Bob有不同大小的糖果棒:A[i]是Alic ...

  6. C#LeetCode刷题之#888-公平的糖果交换(Fair Candy Swap)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3758 访问. 爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝 ...

  7. leetcode-888-公平的糖果交换

    题目描述: 爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 块糖的大小,B[j] 是鲍勃拥有的第 j 块糖的大小. 因为他们是朋友,所以他们想交换一个糖果棒,这样交换后,他们都有相同的 ...

  8. Swift LeetCode 目录 | Catalog

    请点击页面左上角 -> Fork me on Github 或直接访问本项目Github地址:LeetCode Solution by Swift    说明:题目中含有$符号则为付费题目. 如 ...

  9. C#LeetCode刷题-数组

    数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...

随机推荐

  1. Docker容器:将带UI的程序直接转为Web应用,so easy

    摘要:使用Docker容器,将带UI的程序,直接转换为Web应用.很方便,跟大家分享一下. 本文分享自华为云社区<使用Docker容器,将带UI的程序,直接转为Web应用>,作者:tsjs ...

  2. 如何通过A/B测试提升Push推送消息点击率?

    618电商节火热进行中,某电商App准备向用户推送一条全局活动消息,运营准备了两个推送文案: 文案A:年中囤货我们更懂你,没有大优惠怎敢惊动你:美妆个户,户外运动,医疗健康,一站式备齐,点击>& ...

  3. 入坑KeePass(四)KeePass通过坚果云WebDav同步方法

    参考博客:什么值得买平台-Keepass+坚果云:多平台密码无缝同步 .1.在坚果云上创建一个同步专用的文件夹(建议勾上"默认不同步到电脑"选项) 创建之后可以把刚才创建的数据库文 ...

  4. php 使用phpqrcode生成二维码并上传到OSS

    一般情况调用phpqrcode第三方插件 会把生成的二维码图片保存到服务器,不保存服务器也会以header头的形式输出到浏览器,(我们不允许把图片文件保存的liunx服务器,只能保存到阿里云OSS存储 ...

  5. 一文带你搞懂 JWT 常见概念 & 优缺点

    在 JWT 基本概念详解这篇文章中,我介绍了: 什么是 JWT? JWT 由哪些部分组成? 如何基于 JWT 进行身份验证? JWT 如何防止 Token 被篡改? 如何加强 JWT 的安全性? 这篇 ...

  6. 下载nltk数据包报错

    安装nltk需要两步:安装nltk和安装nltk_data数据包 安装nltk 安装nltk很简单,可以直接在pycharm环境中安装,flie -> settings-> Python ...

  7. CentOS中实现基于Docker部署BI数据分析

    作为一个专业小白,咱啥都不懂. linux不懂,docker不懂. 但是我还想要完成领导下达的任务:在linux中安装docker后部署数据可视化工具.作为一名敬业 的打工人摆烂不可以,躺平不可以,弱 ...

  8. Android (微信扫码登录) 获取微信二维码+扫码登录

    话不多说  直接上菜! 一.因为是微信扫码登录,所有要在微信开放平台  微信开放平台 (qq.com) 进行注册----- 如下 1.资源中心 里面也有详细的官方讲解,里面也有demo  可以下载 2 ...

  9. 一条update语句到底加了多少锁?带你深入理解底层原理

    迎面走来了你的面试官,身穿格子衫,挺着啤酒肚,发际线严重后移的中年男子. 手拿泡着枸杞的保温杯,胳膊夹着MacBook,MacBook上还贴着公司标语:"我爱加班". 面试开始,直 ...

  10. NC13328 倒水

    NC13328 倒水 题目 题目描述 有一个大水缸,里面水的温度为 \(T\) 单位,体积为 \(C\) 升.另有 \(n\) 杯水(假设每个杯子的容量是无限的),每杯水的温度为 \(t[i]\) 单 ...