算法练习帖--60--公平的糖果棒交换(Java)

Java 求解分发糖果 文章目录一、题目二、题解三、代码四、总结 一、题目 老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。 你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。 评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。 那么这样下来,老师至少需要准备多少颗糖果呢? 二、题解 该题,也可以考虑贪心的策略 局部最优,推出全局最优 从左到右:只要右边评分比左边大,右边的孩子就多一个糖果,全局最优:相邻的孩子中,评分高的右孩子获得比左边孩子更多的 阅读详情

公平的糖果棒交换

一、题目描述

爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 根糖果棒的大小,B[j] 是鲍勃拥有的第 j 根糖果棒的大小。

因为他们是朋友,所以他们想交换一根糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。)

返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1] 是 Bob 必须交换的糖果棒的大小。

如果有多个答案,你可以返回其中任何一个。保证答案存在。
(题目来源:力扣(LeetCode))

示例 1:
输入:A = [1,1], B = [2,2]
输出:[1,2]
示例 2:
输入:A = [1,2], B = [2,3]
输出:[1,2]
示例 3:
输入:A = [2], B = [1,3]
输出:[2,3]
示例 4:
输入:A = [1,2,5], B = [2,4]
输出:[5,4]
提示:
1 <= A.length <= 10000
1 <= B.length <= 10000
1 <= A[i] <= 100000
1 <= B[i] <= 100000
保证爱丽丝与鲍勃的糖果总量不同。
答案肯定存在。
二、解决方法

1. 暴力法

package com.lxf.test2;

public class FairCandySwap {
    public static void main(String[] args) {
        int[] A={1,2};
        int[] B={2,3};
        System.out.println(fairCandySwap(A, B));
    }
    public static int[] fairCandySwap(int[] A, int[] B) {
        //A数组和
        int sumA=0;
        //B数组和
        int sumB=0;
        for (int i : A) {
            sumA+=i;
        }
        for (int i : B) {
            sumB+=i;
        }
        //两个数组差值的一半值
        int sub=(sumA-sumB)>>1;
        //结果数组
        int[] result=new int[2];
        ok:
        for (int i = 0; i < A.length; i++) {
            for (int j = 0; j < B.length; j++) {
                //如果两个数的差值等于sub,说明就是这两个数交换就可以得到两个和相等的数组了
                if(A[i]-B[j]==sub){
                    result[0]=A[i];
                    result[1]=B[j];
                    break ok;
                }
            }
        }
        return result;
    }
}

2. 哈希表(官方题解)

class Solution {
    public int[] fairCandySwap(int[] A, int[] B) {
    	//数组A和
        int sumA = Arrays.stream(A).sum();
        //数组B和
        int sumB = Arrays.stream(B).sum();
        //差值一半
        int delta = (sumA - sumB) / 2;
        //将A数组存储到set集合中
        Set<Integer> rec = new HashSet<Integer>();
        for (int num : A) {
            rec.add(num);
        }
        //结果数组
        int[] ans = new int[2];
        for (int y : B) {
        	//如果rec集合包含一个数=B数组中的一个数+差值一半
        	//将这两个值存储后直接返回
            int x = y + delta;
            if (rec.contains(x)) {
                ans[0] = x;
                ans[1] = y;
                break;
            }
        }
        return ans;
    }
}

3. 开辟一个辅助判断数组
大佬解法:Java 题目深度解析,用时3ms超过99.85%

public int[] fairCandySwap(int[] A, int[] B) {
		//差值一半
        int diff = 0;
        //B的判断数组(也可以是A数组的判断数组)
        //也就是记录哪些值是有的,因为B数组的大小确定了(>=1&&<=10000)
        boolean[] flags = new boolean[100001];
        for(int num: A)
            diff -= num;
        for(int num: B){
            diff += num;
            flags[num] = true;
        }
        diff /= 2;
        for(int num: A){
            int numB = num + diff;
            //如果A数组中一个数加上差值一半的数存在于B数组中,返回这两个数
            if(numB > 0 && numB < 100001 && flags[numB])
                return new int[]{num, num + diff};
        }
        return null;
    }
VS Code+ESP-IDF开发避坑指南:头文件标红报错的5种解决方法(附CMakeLists.txt配置) 本文详细解析了在VS Code中使用ESP-IDF开发ESP32时头文件标红报错的5种解决方法,包括环境配置检查、CMakeLists.txt规范配置、路径解析策略、缓存清理技巧和高级调试手段。特别提供了CMakeLists.txt的实战配置示例,帮助开发者彻底解决头文件路径问题,提升开发效率。 阅读详情

相关推荐

Gradle进阶:4:结合Sonarqube进行代码审查

作为代码质量检查的流行工具,比如Sonarqube能够检查代码的“七宗罪”,跟代码结合起来能够更好地提高代码的质量,这篇文章将会介绍如何结合gradle和sonarqube对代码质量与测试覆盖率进行分析。

知行合一 止于至善 1万+

LeetCode888. 公平的糖果棒交换(两数之和变形)

1、题目描述 https://leetcode-cn.com/problems/fair-candy-swap/ 爱丽丝和鲍勃有不同大小的糖果棒: A[i] 是爱丽丝拥有的第 i 根糖果棒的大小,B[j] 是鲍勃拥有的第 j 根糖果棒的大小。 因为他们是朋友,所以他们想交换一根糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。) 返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1]是 Bob 必须交换的糖果棒的大小.

IOT_victor的博客 366

YOLOv11多模态融合实战:基于YOLOFuse的RGB与红外线(IR)协同检测技术解析

本文深入解析了基于YOLOv11的YOLOFuse多模态融合技术,重点探讨了RGB与红外线(IR)协同检测的实现原理与实战应用。文章详细介绍了双流架构与数据级、特征级、决策级三种融合策略,并通过实战案例展示了其在低光照、复杂环境下显著提升检测精度与鲁棒性的优势,为全天候安防、自动驾驶等场景提供了有效的技术解决方案。

weixin_29041195的博客 650

leetcode 888. Fair Candy Swap(公平的糖果交换)--Java题解

题目描述 爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 块糖的大小,B[j] 是鲍勃拥有的第 j 块糖的大小。 因为他们是朋友,所以他们想交换一个糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。) 返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1] 是 Bob 必须交换的糖果棒的大小。 ...

leyao的博客 892

3D医学影像分割实战:从数据预处理到模型训练全流程解析

本文详细解析了3D医学影像分割的全流程,从数据预处理到模型训练,重点介绍了nnUNet框架的应用技巧。通过实战案例,帮助开发者掌握如何处理复杂的.nii.gz文件格式、优化数据预处理流程以及高效训练3D分割模型,特别适合医学影像分析领域的从业者参考。

weixin_29098367的博客 223

034、MLCA 多尺度局部上下文注意力的 YOLOv11 适配:轻量级金字塔式空间上下文聚合

本文介绍了一种将多尺度局部上下文注意力(MLCA)模块集成到YOLOv11模型中的方法,以解决小目标检测中空间信息丢失的问题。MLCA采用金字塔式局部上下文聚合策略,通过不重叠的网格划分实现轻量级空间注意力计算,相比全局注意力机制能更好地保留小目标特征。 作者详细记录了实现过程,包括模块定义、参数调优和训练技巧,特别指出避免使用BN而改用GroupNorm以提升训练稳定性。在VisDrone数据集上的实验表明,MLCA-YOLOv11在参数量和计算量基本不变的情况下,mAP提升2.5%,其中行人检测提升3.

sundong_81的博客 280

【精】LintCode领扣算法问题答案:1594. 公平的糖果交换

领扣LintCode算法问题答案-1594. 公平的糖果交换 目录1594. 公平的糖果交换描述样例 1:样例 2:题解鸣谢 1594. 公平的糖果交换 描述 爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 块糖的大小,B[j] 是鲍勃拥有的第 j 块糖的大小。 因为他们是朋友,所以他们想交换一个糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。) 返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1] 是.

二当家的白帽子 778

RK3588之内存带宽计算及达成率

本章来和大家介绍一下内存带宽的计算与达成率

文艺小少年的博客 1816

Leetcode 888. 公平的糖果棒交换(简单数学推导,Hash表优化)

数学推导,然后用哈希表优化,时间复杂度O(N) class Solution { public: vector<int> fairCandySwap(vector<int>& A, vector<int>& B) { int countA = 0, countB = 0; unordered_set<int> hashset; vector<int> res; ..

wwxy1995的博客 189

向华为学习——解读华为战略规划SP与业务计划BP流程【附全文阅读】

该方案针对大中型企业高管及战略团队,系统拆解华为SP(4-9月中长期规划)与BP(10-12月年度执行)双轨体系,形成"战略制定-业务设计-资源配置-绩效解码"闭环。SP侧重市场趋势分析、业务优先级与资源分配,BP细化KPI、预算及行动计划。通过价值树、战略解码等工具实现战略到部门/个人的目标分解,强化跨部门协同与过程管控。配套17份华为实战资料(包括战略管理、流程优化、销售组织建设等核心方法论),助力企业建立规范的战略执行体系,实现资源优化与绩效落地。

cdfunlove的博客 771

Android 10.0 SystemUI 屏蔽状态栏消息推送弹出的悬浮通知

在状态栏中,有一些通知类似 消息推送 弹出的 悬浮通知,弹出30秒之后会消失掉 要想屏蔽掉这些通知,首选知道这些通知是怎么产生的 通知类型 NotificationContentInflater.java 详细的介绍各种通知的类型 frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java /** * The defau

安卓兼职framework和app工程师的博客 1542

公平的糖果棒交换

题目 爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 根糖果棒的大小,B[j] 是鲍勃拥有的第 j 根糖果棒的大小。 因为他们是朋友,所以他们想交换一根糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。) 返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1] 是 Bob 必须交换的糖果棒的大小。 如果有多个答案,你可以返回其中任何一个。保证答案存在。 示例 1: 输入:A = [1,1], B = [2,2]

weixin_42100694的博客 418

【Windows Server 2019】企业虚拟专用网络服务的配置和管理(上)

博文介绍了部署企业虚拟专用网的定义,目的,以及好处。同时说明了实验拓扑图以及虚拟专用网络的工作原理。

VMware, Windows, Linux, Cisco, Container, Kubernetes, Kali 1万+

贪心算法入门:从NOIP经典题P1094掌握双指针与排序策略

贪心算法是算法竞赛与工程实践中解决最优化问题的核心思想之一,其核心原理在于通过每一步的局部最优选择,期望达到全局最优解。在实际应用中,排序往往是贪心策略得以实施的关键前置步骤,它能将无序数据转化为有序序列,从而为双指针等高效技巧创造条件。这种排序加贪心的组合,在解决资源分配、区间调度等经典问题时,能显著提升算法效率,具有很高的技术价值。以NOIP普及组真题“纪念品分组”(洛谷P1094)为典型场景,该问题要求将纪念品两两分组且组内价格和不超过上限,求最少组数。通过先排序后使用对撞双指针(最小配最大)的贪心策

weixin_33946020的博客 736

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

[leetCode]888. 公平的糖果棒交换

题目 哈希表 推导出映射关系使用哈希表求解: 假设A的总和为sumA, B的总和为sumB,交换元素x, y后A、B总和相等,即sumA−x+y=sumB−y+x,化简得:x=y+(sumA−sumB)/2sumA - x + y = sumB - y + x,化简得: x = y + (sumA - sumB) / 2sumA−x+y=sumB−y+x,化简得:x=y+(sumA−sumB)/2,将A中元素加入哈希表,遍历B中元素,如果符合上述映射关系,则找到了交换得一对元素。 class Solut

Warms的博客 197

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LeetCode 888. 公平的糖果棒交换(简单)

888. 公平的糖果棒交换 爱丽丝和鲍勃有不同大小的糖果棒:A[i]是爱丽丝拥有的第i根糖果棒的大小,B[j]是鲍勃拥有的第j根糖果棒的大小。 因为他们是朋友,所以他们想交换一根糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。) 返回一个整数数组ans,其中ans[0]是爱丽丝必须交换的糖果棒的大小,ans[1]是 Bob 必须交换的糖果棒的大小。 如果有多个答案,你可以返回其中任何一个。保证答案存在。 示例 1: 输入...

VictorKa的博客 244

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Leetcode 公平的糖果交换

爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i块糖的大小,B[j] 是鲍勃拥有的第 j块糖的大小。 因为他们是朋友,所以他们想交换一个糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。) 返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1]是 Bob 必须交换的糖果棒的大小。 如果有多个...

持续学习和分享感兴趣的技术 358

leetcode每日一题-公平的糖果棒交换

题目: 爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 根糖果棒的大小,B[j] 是鲍勃拥有的第 j 根糖果棒的大小。 因为他们是朋友,所以他们想交换一根糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。) 返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1] 是 Bob 必须交换的糖果棒的大小。 如果有多个答案,你可以返回其中任何一个。保证答案存在。 来源:力扣(LeetCode) 链接:https://l

苏木的博客 341

力扣 888. 公平的糖果交换

题目 爱丽丝和鲍勃拥有不同总数量的糖果。给你两个数组 aliceSizes 和 bobSizes ,aliceSizes[i] 是爱丽丝拥有的第 i 盒糖果中的糖果数量,bobSizes[j] 是鲍勃拥有的第 j 盒糖果中的糖果数量。 两人想要互相交换一盒糖果,这样在交换之后,他们就可以拥有相同总数量的糖果。一个人拥有的糖果总数量是他们每盒糖果数量的总和。 返回一个整数数组 answer,其中 answer[0] 是爱丽丝必须交换的糖果盒中的糖果的数目,answer[1] 是鲍勃必须交换的糖果盒中的糖果的数

(ง •_•)ง没有困难的工作,只有勇敢的狗狗 537

888. 公平的糖果交换

解题思路: 1.遍历数组A和B,分别求出A和B的总和,以及差值的平均 2.将B中的元素存入哈希表 3.遍历数组A,如果当前A中的元素加上差值平均后的值在B中存在,则这一对就是要求的结果 采坑点:如果加减都可以实现,那就用加,不要用减,我在这里卡了很久:我用sa-sb,然后用val-avg,导致越界 代码实现: class Solution { public int[] fa...

如沐清风的博客 178

LeetCode888. 公平的糖果交换

爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 块糖的大小,B[j] 是鲍勃拥有的第 j 块糖的大小。 因为他们是朋友,所以他们想交换一个糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。) 返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1] 是 Bob 必须交换的糖果棒的大小。 如果有多个...

Extraordinary_1994的博客 1135

学爱丽丝说:i'm well

我很好,以前是,以后也是我很好,im well

lambyuyu的专栏 534

Java基础三种常见交换算法的比较

Java基础三种常见交换算法的比较 案例一:借助第三方变量进行数据交换 /**  * 利用低三方变量交换  * @param a  * @param b  */ public static void exchange01(int a , int b ){     int temp = a ;      a = b;      b= temp ;      System.o

qq_17852961的博客 1074

888. 公平的糖果交换 -java实现

爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 块糖的大小,B[j] 是鲍勃拥有的第 j 块糖的大小。 因为他们是朋友,所以他们想交换一个糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。) 返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1] 是 Bob 必须交换的糖果棒的大小。 如果有多个...

moots 434

[Leetcode学习-java]Fair Candy Swap(平均分配糖果)

问题: 难度:easy 说明: 输入 A B两个数组,表示 A B两个孩子手中糖的量(可以理解为重量),然后让他们交换一颗糖果,就能够让两边的糖果重量一样,如果有多个答案,返回任意一个就行。 问题链接:https://leetcode.com/problems/fair-candy-swap/ 输入范围: 1 <= A.length <= 10000 1 <= B.length <= 10000 1 <= A[i] <= 100000 1 <.

qq_28033719的博客 549

分发糖果(Java实现)

题目 老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。 你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。 相邻的孩子中,评分高的孩子必须获得更多的糖果。 那么这样下来,老师至少需要准备多少颗糖果呢? 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/candy 示例1 输入: [1,0,2] 输出: 5 解释: 你可以分别给这三个孩子分发 2、1、2 颗

老师好我叫付十一的博客 864
上一篇: 算法练习帖--59--相似字符串组(Java)
下一篇: 普里姆算法学习(Java)
Alvin Hansen
博客等级 码龄7年 46粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值