LeetCode题库第888题 公平的糖果棒交换

LeetCode第888道题 公平的糖果棒交换

首先,题目中说他们两个人的糖果的总数量是不一样的,并且要将A中的一个糖果和B的一个糖果交换后使得他们两个人的糖果的总数量相等。由此,交换糖果的目的是使得两个人的糖果的总数量相等,而要用A的那一个糖果和B中的那一个糖果交换是和他们两个糖果的总数量之差是相关的,例如:如果A的糖果的总数量比B的糖果的总重量多2,那么,就需要用A中重量为n的糖果来交换B中重量为n-1的糖果,注意:不是交换B中重量为n-2的糖果,因为:假如用A中的2交换B中的1,A的总重量减少了1,而B的糖果总重量是增加了1。
解题的思路是:

  • 将A和B的糖果的总数量分别算出来
  • 求出它们的糖果总数量之差
  • 根据A的糖果总数和B的糖果总数的大小关系来遍历A或B,在遍历的过程中根据当前糖果大小和糖果总数之差在另一个人的糖果列表中寻找满足条件的糖果
  • 注意返回的是列表,其中的两个元素都是糖果的大小且它们是有顺序关系的,第一个元素是爱丽丝必须交换的糖果棒的大小,第二个元素是Bob必须交换的糖果棒的大小。题目说如果有多个答案,你可以返回其中的任何一个,且保证答案存在。
 public int[] fairCandySwap(int[] A, int[] B) {int sum_A = 0;int sum_B = 0;HashMap<Integer, Integer> map_A = new HashMap<Integer, Integer>();HashMap<Integer, Integer> map_B = new HashMap<Integer, Integer>();for (int i = 0; i < A.length; i++) {sum_A+=A[i];map_A.put(A[i], i);}for (int i = 0; i < B.length; i++) {sum_B+=B[i];map_B.put(B[i], i);}int space = Math.max(sum_A, sum_B)-Math.min(sum_A, sum_B);if (sum_A>sum_B) {for (int i = 0; i < A.length; i++) {if (map_B.containsKey(A[i]-space/2)) {return new int[] {A[i], A[i]-space/2};}}}else {for (int i = 0; i < B.length; i++) {if (map_A.containsKey(B[i]-space/2)) {return new int[] {B[i]-space/2, B[i]};}}}return new int[] {};}

学了Python,用Python3也实现了一下,大家可以参考一下:

class Solution:def fairCandySwap(self, A: List[int], B: List[int]) -> List[int]:space = abs(sum(A)-sum(B))if sum(A)>sum(B):for i in A:if i-space/2 in B:return [i, i-space//2]else:for i in B:if i-space/2 in A:return [i-space//2, i]return []

LeetCode题库第888题 公平的糖果棒交换相关推荐

  1. 【每日一题】 888. 公平的糖果棒交换

    [每日一题] 888. 公平的糖果棒交换 避免每日太过咸鱼,一天搞定一道LeetCode算法题 一.题目描述 难度: 简单 爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 根糖果棒的大 ...

  2. 888. 公平的糖果棒交换

    链接:888. 公平的糖果棒交换 题解: https://leetcode-cn.com/problems/fair-candy-swap/solution/fen-xi-zhe-ge-ti-mu-z ...

  3. leetcode 888. 公平的糖果棒交换(set)

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

  4. LeetCode题库第867题 转置矩阵

    LeetCode题库第867题 转置矩阵 LeetCode题库第867题 转置矩阵 我首先想到的方法是新建一个二维的矩阵,然后遍历原来的矩阵,将每一个元素放在新矩阵中该放的位置: // javapub ...

  5. LeetCode题库第1题 两数之和

    两数之和 LeetCode题库第1题 两数之和 看到题,我就想到了暴力法: public int[] force(int[] nums,int target) {for (int i = 0; i & ...

  6. 题解——两种算法解Leetcode题库第977题(暨双指针法小结)

    一.Leetcode题库第977题题目 977. 有序数组的平方 二.解法一--暴力解法 算法思路:for循环遍历数组,对数组元素做平方操作:调用sorted()函数对处理后的数组进行快速排序 算法时 ...

  7. python程序设计题库-python编程题库

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 上期题目连接:1000道python题库系列分享十一(9道)上期题目答案 ...

  8. 自建题库,给题库添加密码访问

    根据吐槽社区的反馈情况,"题库增加密码访问"这个需求被多次提及,因此土著刷题微信小程序v1.8主要迭代了这一功能,并对小程序进行整体改版,新增了个人中心.消息中心,同时添加了发版强 ...

  9. 2021年12月远程网络教育大学英语B统考题库复习真题(完整版)

    远程网络教育大学英语B.计算机应用基础统考题库. 大学英语B统考题库:复习内容全面.格式排版清晰.每道复习试题均为考试针对性试题.多加复习即可轻松通过.(网络统考均采用机考,上机考试,随机组卷,每个考 ...

最新文章

  1. PHP连接MySQL的2种方法以及防止乱码
  2. 使用ROS和TensorFlow进行深度学习
  3. USB入门系列之一:USB概述
  4. 自定义控件的时候为控件增加事件
  5. FOJ 2105 Digits Count
  6. PAT1043 输出PATest (20 分)
  7. redo日志写入为什么“俩阶段提交”
  8. MySQL数据库同步神器 - Gravity - 比Datax好用
  9. java 打印_剑指Offer面试题20(Java版):顺时针打印矩阵
  10. 一个比较完善的购物车类
  11. Linux入门(2)_给初学者的建议
  12. 【数据库原理实验(openGauss)】金融场景化实验
  13. 程序员最常见的技术性误区
  14. python音乐播放器代码_Python简易音乐播放器
  15. 树莓派上使用 LCD1602 显示状态
  16. 计算机机房实训计划,计算机专业实习计划安排.docx
  17. 我国高等数学教材不能误导学生
  18. 幼儿编程Scratch第31讲:垃圾车-乐高入门机器人-WeDo
  19. 电子技术在计算机的应用与未来展望,电子信息技术的应用特点与未来发展趋势研究...
  20. app软件开发现状及前景

热门文章

  1. 推荐一个 Service Mesh 专栏
  2. 无处不在:iOS平台WebView终于支持WebRTC
  3. 选择HLS或WebRTC需要考虑的五个因素
  4. 探秘音视频网络优化与全球化部署最佳实践
  5. AAC音频基础知识及码流解析
  6. 2019DTCC大会分享:分布式数据库全局读一致性
  7. TEG Cheers | 腾讯技术工程运维技术沙龙精彩回顾(内置现场视频)
  8. 定时任务框架APScheduler学习详解
  9. Lua的require使用
  10. Linux下 /dev/null 21 相关知识说明