LeetCode.888-公平的糖果交換(Fair Candy Swap)

這是悅樂書的第339次更新,第363篇原創

java

01 看題和準備

今天介紹的是LeetCode算法題中Easy級別的第208題(順位題號是888)。Alice和Bob有不一樣大小的糖果棒:A[i]是Alice擁有的第i個糖果棒的大小,B[j]是Bob擁有的第j個糖果棒的大小。算法

因爲他們是朋友,他們想交換一個糖果,以便交換後,他們都有相同的糖果總量。 (一我的擁有的糖果總量是他們擁有的糖果大小的總和。)數組

返回一個整數數組ans,其中ans[0]是Alice必須交換的糖果的大小,ans[1]是Bob必須交換的糖果的大小。數據結構

若是有多個答案,你能夠返回其中任何一個。答案保證存在。例如:eclipse

輸入:A = [1,1],B = [2,2]
輸出:[1,2]工具

輸入:A = [1,2],B = [2,3]
輸出:[1,2] [2,3]開發工具

輸入:A = [2],B = [1,3]
輸出:[2,3]測試

輸入:A = [1,2,5],B = [2,4]
輸出:[5,4]code

注意ip

  • 1 <= A.length <= 10000

  • 1 <= B.length <= 10000

  • 1 <= A [i] <= 100000

  • 1 <= B [i] <= 100000

  • 保證Alice和Bob的糖果總量不一樣。

  • 保證有答案。

本次解題使用的開發工具是eclipse,jdk使用的版本是1.8,環境是win7 64位系統,使用Java語言編寫和測試。

02 第一種解法

Alice和Bob的糖果總量不同,要想答案確定存在,他們兩人的糖果總量差值確定爲偶數,只有差值爲偶數時,對差值進行平分獲得一個平均值,糖果總量多的一方減去平均值,少的一方加上平均值,此時兩人的糖果總量是相等的。

所以,咱們只須要求出兩人的糖果總量差值的平均數,拿此平均數加上一方中的任意一個糖果的大小,去匹配另一方中的糖果大小,可以匹配上,說明這兩個糖果是須要雙方交換的,在此情景下,此題有點相似於Two Sum。

public int[] fairCandySwap(int[] A, int[] B) {
    int[] result = new int[2];
    // 存儲A中的元素(換成B也行)
    Set<Integer> set = new HashSet<Integer>();
    int sumA = 0;
    for (int a : A) {
        sumA += a;
        set.add(a);
    }
    int sumB = 0;
    for (int b : B) {
        sumB += b;
    }
    // 兩人糖果總量之差的平均數
    int num = (sumA-sumB)/2;
    // 遍歷B中元素,加上差值平均數去另一個數組裏匹配,
    // 能匹配上,代表遇到了須要交換的元素。
    for (int b : B) {
        if (set.contains(b+num)) {
            return new int[]{b+num, b};
        }
    }
    return result;
}


03 第二種解法

針對第一種解法使用的HashSet,咱們還能夠換成另外的數據結構來代替,使用一個boolean類型的數組來存儲A中的值,其餘思路不變。

public int[] fairCandySwap2(int[] A, int[] B) {
    int[] result = new int[2];
    boolean[] set = new boolean[100001];
    int sumA = 0;
    for (int a : A) {
        sumA += a;
        set[a] = true;
    }
    int sumB = 0;
    for (int b : B) {
        sumB += b;
    }
    int num = (sumA-sumB)/2;
    for (int b : B) {
        if (b+num > 0 && b+num < 100001 && set[b+num]) {
            return new int[]{b+num, b};
        }
    }
    return result;
}


04 小結

算法專題目前已連續日更超過六個月,算法題文章208+篇,公衆號對話框回覆【數據結構與算法】、【算法】、【數據結構】中的任一關鍵詞,獲取系列文章合集。

以上就是所有內容,若是你們有什麼好的解法思路、建議或者其餘問題,能夠下方留言交流,點贊、留言、轉發就是對我最大的回報和支持!

相關文章
相關標籤/搜索