目錄
題目鏈接:
題目:
解題思路:
代碼:
總結:
題目鏈接:
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)