iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
自我挑戰組

解三十天的 CodeWars系列 第 12

Mean Square Error

  • 分享至 

  • xImage
  •  

CodeWars 題目

Link

難度

5 kyu

題目

參數是兩個長度一樣的陣列,回傳陣列對應元素之間扣除後,平方差的平均。

實作

var solution = function (firstArray, secondArray) {
   return secondArray.map((item, index) => {
      return Math.pow(item - firstArray[index], 2)
   }).reduce((sum, work) => sum += work) / secondArray.length;
}

完全沒有經過構想直接一次實作完成。

兩個陣列參數長度一樣,表示互換的話對應的 index 也是相同的、並且輸出的結果長度也是一樣的,因此使用 map 方法來迭代陣列。

返回的結果是相扣除之後的平方,也因為平方不需要考慮正負。

最後 reduce 加總陣列每一個元素並除以長度,最後返回結果。

他人的解法

function solution(a, b) {
   return a.reduce(function (s, n, i) {
      return s + Math.pow(n - b[i], 2)
   }, 0) / a.length;
}

其實也是同樣的概念,但把兩件事合併一起,讓程式碼更加簡潔。

s 代表累加值,會帶入 reduce 第二參數 0(如果有的話。
n 表示迭代到的元素,也就是從 a[0] 開始,i 則是陣列索引。

同時把元素扣除另一個陣列的對應位置,並累加平方值。
最後 reduce 輸出的唯一值除以長度,即為答案。

心得

其實解題到現在,除了感受到自己實作上還需要加油外。
英文也需要加油⋯⋯有好多淵源頗深的邏輯題,演算法真是博大精深🥹。


上一篇
Directions Reduction
下一篇
Maximum subarray sum
系列文
解三十天的 CodeWars30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言