来源:力扣(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. 给小白的 PG 容器化部署教程(下)

    作者:王志斌 编辑:钟华龙 本文来自社区小伙伴 王志斌 的投稿.从小白的角度,带你一步步实现将 RadonDB PostgreSQL 集群部署到 Kubernetes 上.文章分为上下两部分,< ...

  2. iPhone x 的区别

    最近入手两台iPhone x, 均从官网购买,两台分别是2017年和2018年生产,对比了一下,两台还有是一些差别: 首先苹果X使用起来还是非常爽的,没有HOME键,明显比按HOME键方便,因为按HO ...

  3. BUUCTF-菜刀666

    菜刀666 这题和之前做过的流量题不同,对我还是有些难度.看了看大佬的wp才做出来的 wireshark打开流量包,一开始只是单纯过滤http,包很多,看花了眼,看了好多也没觉得有啥异常. 后面才知道 ...

  4. RPA应用场景-公积金贷款业务数据整合和报送

    场景概述 公积金贷款业务数据整合和报送 所涉系统名称 个贷系统.公积金管理系统 人工操作(时间/次) 0.5小时 所涉人工数量1000操作频率 每日 场景流程 1.机器人整理个人贷款信息.个人贷款账户 ...

  5. SQL SERVER 算法面试题,自己再插入数据时,本想一次性复制10条数据,结果变成了1024条。产生一个算法bug,最后记录一下

  6. 抓包整理外篇fiddler———— 会话栏与过滤器[二]

    前言 简单介绍一下会话栏和过滤器 正文 在抓包的时候这两个可以说是必用吧. 会话栏: 会话栏我这里介绍根据左边部分和右边部分. 左边部分是一些图标,有些人发现有个习惯,不习惯看图标. 其实说白了,我们 ...

  7. Tomcat深入浅出(一)

    一.Tomcat简介 我们下载好Tomcat后需要配置一下Java环境:如果打开出现闪退得情况,首先是jdk 同时配置JRE_HOME Tomcat的一些关键目录: /bin:存放用于启动及关闭的文件 ...

  8. CF141E Clearing Up 题解

    思路分析 自认为是一道很好的思维题. 直接看上去的想法是: 跑一个生成树,每一次加的边颜色交替进行,直到拉出生成树. 仔细想想,发现可能无法保证最后是一棵树而不是森林,也是说输出都是 \(-1\) . ...

  9. [ZJCTF 2019]NiZhuanSiWei 1

    考察知识点:反序列化.php伪协议 1.打开之后获得源码信息,如下: <?php $text = $_GET["text"]; $file = $_GET["fil ...

  10. HMS Core图形图像技术展现最新功能和应用场景,加速构建数智生活

    [2022年7月15日,杭州]HUAWEI Developer Day(华为开发者日,简称HDD)杭州站拉开帷幕.在数字经济不断发展的今天,开发者对图形图像的开发需求更加深入和多样化,从虚拟环境重构到 ...