2021/02/01 每日一題 公平的糖果棒交換

二月開始了,爭取每天都能打開寫文章

LeetCode上公平的糖果棒交換,簡單難度,記錄下解題思路

已知兩個數組,當交換數組中一個數的時候,兩個數組的和會相等,那么可知
sumA - A中交換的數 + B中交換的數 = sumB - B中交換的數 + A中交換的數
通過變換可以得到下面的公式:
A中交換的數 = (sumA - sumB + 2*B中交換的數)/ 2
B中交換的數 = (sumB - sumA + 2*A中交換的數)/ 2
那么假設確定了要交換的數為b,則要求要交換的a可以通過

var fairCandySwap = function (A, B) {
    // 通過reduce求AB的和 
    let sumA = A.reduce((a,b) => {return a+b},0)
    let sumB = B.reduce((a,b) => {return a+b},0)
    // 根據公式A中交換的數 = (sumA - sumB + 2*B中交換的數)/ 2
    let sum = sumA - sumB
    for(let i=0;i<B.length;i++) {
      // 假設當前B[i]是確定的,那要根據當前B[i]求出對應的要交換的a
      // 如果要交換的a存在于A中那么這個就成立,就輸出這個數組
      // 定義要交換的a
      let a = (sum + 2*B[i]) / 2
      // 通過indexof來判斷A中是否有這個數,如果有的話就是可以交換的
      if(A.indexOf(a) !== -1) {
        // 返回這個數組
        return [a,B[i]]
      }
    }
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容