森田賢二のleetCodeの使い方、解説、解答を毎日更新しているキャラクター

[leetcode]問題解答と解説。midianSum [JavaScript]

[leetcode]問題解答と解説。midianSum [JavaScript]

森田賢二のleetCode
森田賢二のleetCode

年末まで毎日leetcodeと向き合います。
今日の~LeatCode~ 自主学習はこちら。

midianSum ルール

  • 中央値の要素を返していく
  • 要素数が偶数あって中央値が2つある場合はそれを足して2で割った数

これは実はleetcodeにはないです
が出会ったのでやりました

midianSum 解答 一例

const midianSum = (arr) => {
 let last = arr.length
 let result = []
 while(0 < last){
    let isEven = arr.length % 2 === 0
    let mid = isEven ? getMid(arr) -1 : getMid(arr) // lower middle
    if(arr.length === 2){
      result.push((arr[0] + arr[1]) / 2)
      break
    }
    if(isEven){
      result.push((arr[mid] + arr[mid +1]) / 2)
      arr.splice(mid + 1, arr.length -1)
    } else {
      result.push(arr[mid])
      arr.splice(mid, arr.length -1)
    }
 }
 return result
}

// midianSum([1, 10, 100, 1000, 10000]) // [100, 5.5]
// midianSum([1, 2]) [1.5]
// midianSum([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) // [6, 3, 1.5]
// midianSum([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) // [5.5, 3, 1.5]

をやってみて感想

配列のspliceとかsliceとかこういう問題では破壊的に書いて平気かどうかあるが使っちゃう。(使いたくなければ最初の行でspread opratorすればいい)
なかなか使わないメソッドを使えるのもいい機会

カテゴリー leetCode