888. 公平的糖果交换
目录
题目链接:
题目:
解题思路:
代码:
总结:
题目链接:
888. 公平的糖果交换 - 力扣(LeetCode)
题目:
解题思路:
前一个数组和sumA,后一个数组sumB,然后使用HashSet将第一个数组的所有值存入哈希表中,
sumA-自己一个值+B的一个值==sumB-自己的一个值+A的一个值就是找到了,这个公式可以化简为x=y+(sumA+sumB),这样遍历第二个数组,根据这个公式找到x去哈希表里面寻找即可,找到就是有,没找到就是没有
代码:
class Solution {public int[] fairCandySwap(int[] aliceSizes, int[] bobSizes) {Set<Integer> st=new HashSet<>();int suma=0;for(int val:aliceSizes){st.add(val);suma+=val;}int sumb=0;for(int val:bobSizes){sumb+=val;}int x=(suma-sumb)/2;for(int val:bobSizes){int y=val+x;if(st.contains(y)){return new int[]{y,val};}}return new int[]{};}
}
总结:
【摘要】该题目要求通过交换糖果盒使两人糖果总量相等。解题关键在于计算双方糖果总和sumA和sumB,将A的糖果存入哈希表。通过数学推导得出交换值应满足x=y+(sumA-sumB)/2。遍历B的糖果值,用公式在哈希表中查找匹配的A值,找到即返回交换对。该方法利用哈希表实现O(1)查找,总时间复杂度为O(m+n)。(字数:149)