iT邦幫忙

5

在 freecodecamp 開啟 daily coding challenge : Day08-2nd Largest

  • 分享至 

  • xImage
  •  

freecodecamp 是什麼 ?

以下是他們的自介

freeCodeCamp 是一個免費學習編程的開發者社區,涵蓋 Python、HTML、CSS、React、Vue、BootStrap、JSON 教程等,還有活躍的技術論壇和豐富的社區活動,在你學習編程和找工作時爲你提供建議和幫助。

不管你是前端,後端還是全端,尤其是自學者(aka沒有朋友)
都適用這網站,但目前我以前端為主。
https://www.freecodecamp.org/learn/front-end-development-libraries/

最近有空從頭檢視自己 coding 的基礎
這個系列會有我發現這個網站的小細節及 daily challenge
以 day-num 紀錄,但不會每天更新(也是練習寫文章)


Day 08 - 2nd Largest

https://ithelp.ithome.com.tw/upload/images/20251002/201793146DOxnTimqu.png

直覺就是排序然後拿第二個對吧
但是有重複的數值呢?

本題重點在於

  • “去除重複值”
  • “排序 : 從大到小。”
  • “回傳第二個元素,「第二大」。”

思考一下
.
.
.
.
.
.

  1. 去除重複值, Set 或 filter。

    const uniqueArr = [...new Set(arr)];
    const uniqueArr = arr.filter((val, idx) => arr.indexOf(val) === idx);
    

    就可讀性及效能而言,我會選擇使用 Set

  2. 排序,sort() 或 迴圈

    • sort
     arr.sort() ---(x) 
     //必須告訴函式要小到大還是大到小
    
     //升冪(從小到大)
     arr.sort((a, b) => a - b);
     //降冪(從大到小)
     arr.sort((a, b) => b - a);
    
    • 迴圈
    let max = -Infinity, second = -Infinity;
    for (let num of arr) {
      if (num > max) {
        second = max;
        max = num;
      } else if (num < max && num > second) {
        second = num;
      }
    }
    return second;
    
    • 效能優先的話用“迴圈”,開發體驗優先的話用“sort”。
  3. arr[]
    0,1,2,3,4

    //第二個元素
    arr[1]
    

tips

  • Set v.s filter
方法 可讀性 效能 適合場景
Set O(n) 推薦,資料大時最佳
filter O(n²) 資料小時 OK
  • Set 是一個 建構函式(constructor),所以必須用 new 來建立實例。
    "S" 是大寫喔!

      const unique = new Set(arr); //unique 是物件
      const uniqueArr = [...new Set(arr)]; // 用"..."展開後才是陣列
    
  • python 的寫法 在去除重複及排序 和 javaScript 略有差異

    def second_largest(arr):
        unique = list(set(arr))        # 去重複
        unique.sort(reverse=True)      # 降冪排序
        return unique[1]               # 取第二大
    

    set(arr) → 去重
    list() → 將 Set 轉回列表,方便排序
    sort(reverse=True) → 由大到小排序 (js 不能這樣寫)


我是阿mo,洋蔥蕃茄煮一煮可以不用加麵...撐飽/images/emoticon/emoticon82.gif


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言