PIXNET Logo登入

文科少女學程式

跳到主文

誰說文科腦沒辦法寫程式!快跟我一起用文科腦學程式吧!

部落格全站分類:數位生活

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 3月 14 週二 202322:20
  • 【LeetCode刷刷】Two Sum

image
這幾天接受了白板題的小測驗,解了一道題,其中提出這題測驗題的大大也分享了他的解法,回到家後,自己也嘗試了一下他給的更好的解法,這邊也來稍微紀錄一下。
首先,一樣先看題目內容

題目需求
從陣列中取出加總起來的合可以等於第二個參數的兩個數字,並返回它們在陣列中的index。
解題過程
在現場我想到的方向如下:
第一個方向 - 先排序陣列,讓他可以從小至大排列,用兩個個pointer,一個從頭開始移動,一個從尾開始移動+ 迴圈來檢查哪兩個數字的總合等於第二個參數。
但是!!回家重新復盤檢討後,才發現這麼做並不是正解!!
發現到的問題是「因為我有重新排序,所以出來的index會是錯的。」
雖然這個做法的確可以找出可以加總出正解的兩個數字,但是最終回傳的index並不是正確的。
我自己檢討的時候還有針對這個方向做修改,修改方式就是複製出一個陣列做排序。

但是!!這樣做還是有問題,因為如果陣列內對應到正確整合的兩個數字是同一個數字的話,用indexOf回找數字的index只會找到排序第一的數字,也就無法return出正確的答案。
第二個方向 - 不做排序,透過數字差下去找另一個數字的位置。
這個方式是當天出題大大給我一些小提示後,又想到的方式,但是因為一樣有用indexOf去找數字的index,所以一樣會有方向一檢討後調整解法的問題。
第三個方向 - 效率比較差的雙迴圈的方式。
這是另一個我自己在家檢討的時候,想到的方式。雖然因為跑了兩個迴圈,時間複雜度變成O(n^2)了,整體效率比較差,但至少有先達成這道題的目標答案。
外圈從頭開始跑迴圈到倒數第二個數字,內圈從第二個數字跑到最後一個數字。
第四個方向 - 只跑一次迴圈,並且用查找效率較好的物件儲存扣掉當前遍歷到數字後,還剩餘多少的數字和當前遍歷到的數字index。
詳細把程式碼實作出來後,只需要跑一個迴圈,整體效率比較好,且可以達到這題需求的解法其實還是當天出題大大最後提點我的解法。
這裡也將完整的程式碼實作出來如下:
每個小步驟的說明
1. 準備一個拿來存[target - 當前遍歷數字]剩餘數值和當前遍歷數字index的空物件。
2. 跑一個for迴圈,每跑一次都會去計算遍歷到的當前數值還差多少可以達到target數字。
3. 如果temp裡面沒有對應到的剩餘數值的話,意即如果去查找temp物件,返回undefined的話,就把當前數字差多少的數值和當前數字的index放進temp物件裡面。
4. 如果從temp中查有查找到對應的剩餘數值,而且存儲數字的index和當前跑到的數字index不相同的話(因為不能自己跟自己加總),就返回自己的index,儲存當時數字的index。

這樣就完成了!感謝那位大大當天最後的提點,讓我學到一個很不錯的解法。
 
(繼續閱讀...)
文章標籤

文科少女寫程式 發表在 痞客邦 留言(0) 人氣(40)

  • 個人分類:LeetCode刷刷
▲top
  • 11月 13 週日 202208:28
  • 【LeetCode刷刷】 Move Zeroes(移動數字零)

image
許久未寫LeetCode刷題筆記了,趁著這次參加一個小考試的機會,來自己回顧檢討一下自己的寫的這道題。
看一下題目內容
題目需求
要將陣列中的數字0全部都排到陣列最後面。
解題過程
我總共想了兩個方向的作法:
第一個方向 - 用一個pointer + 迴圈來檢查是不是0,並且進行splice和push的動作。
用while迴圈逐一去比對陣列每個數字,當發現是0的時候,就把這個數字拿出來往後放。
但是!!又把它拿出來檢討後,才發現這麼做其實會有一個問題!!(思慮不周的我,還以為這樣就完美完成,然後就這樣把答案交出去了QQ)
發現到的問題是「因為陣列的排序有變動,如果在這個狀況下跑迴圈,會有漏檢查的數字。」
例如:
目標排序陣列為[0, 0, 1, 0]
index會在第一次排成[0, 1, 0, 0]後,被+1,但是這樣就檢查不到原本index為1的數字,如果原本index為1的數字又剛好是0的話,就無法達成這題的需求。
為了解決這個問題,我又改了一個寫法。

但是!!又發現一個問題,這個做法會造成太多多餘的迴圈檢查步驟,讓時間限制超過。
第二個方向 - 用insertion sort(有兩個pointer)的方式進行排序。
因為上面的方向都沒有找到比較完美的解法,所以就又回頭去複習一下之前學的演算法內容,找到了一個比較合適的方法「insertion sort」,整體的實作方向用文字來解釋的話,就是「往後找出不等於0的數字,與數字0交換位置」。
每個小步驟的說明
1. 準備兩個pointer(我這邊命名為leftIndex和rightIndex),兩個都是從陣列的index 0為起點。
2. 一開始pointer還在相同起點時,如果指到的數字為0,rightIndex會被+1,目的是繼續往後查找不為0的數字;如果數字不為0的話,就存下rightIndex的數字,與leftIndex的數字做交換,目的是將不為0的數字往前排,排定過後需要把rightIndex和leftIndex都+1,目的是要能繼續往後檢查還沒排定的數字。
3. 整體步驟以迴圈來進行,當rightIndex等於array長度就不要再繼續做檢查的動作,也代表每個數字都檢查過一次了。

完整程式碼內容
方向二初版

方向二優化版
(繼續閱讀...)
文章標籤

文科少女寫程式 發表在 痞客邦 留言(0) 人氣(71)

  • 個人分類:LeetCode刷刷
▲top
  • 10月 23 週五 202012:05
  • 【LeetCode刷刷】Ugly Number(誰是醜陋數)

image
這次是找出醜陋數的題目
題目需求:
若質因數為2、3、5,則此數字為質因數,如果可以被其他數字整除,則不為醜陋數,但是1為醜陋數(回傳true或false)。
解題過程:
1. 先排除小於1的數字,因為負數和0都不為我們所說的醜陋數。
2. 接著因為1為true,所以也把1的判斷獨立寫出來。
2. 分三個區塊確認,用%分別針對2、3、5取餘數,如果不等於0就一定是false。(迴圈條件設定大於2、3、5的數字)
=>由於分三個部分,用迴圈檢查,當可以被3除,但卻不能被2除的數字出來的話,會直接顯示false,
所以這裡只需要確認是否可以被這三個數字整除就好,每一個數字的餘數確認都不用馬上回傳false,
而是用break跳出迴圈進行下一個數字的餘數檢查。
3. 如果第一次可以被整除,不代表一定可以繼續被整除下去,所以進行除2、3、5的動作,直到數字被除到變最小
4. 不管在取餘數階段就被判斷不是醜陋數而被用break強制跳出迴圈的數字,還是被除到最小後結束迴圈的數字,
都會在最後面再透過%檢查一次,結果的true&false會從這個部分判斷並傳出
程式碼內容:

(繼續閱讀...)
文章標籤

文科少女寫程式 發表在 痞客邦 留言(0) 人氣(147)

  • 個人分類:LeetCode刷刷
▲top
  • 10月 20 週二 202013:46
  • 【LeetCode刷刷】Power of Two(判斷2的次方)

這次打算寫自己的LeetCode刷題記錄,主要是為了要留下自己的解題過程,
因為文科少女除了是文科腦以外,還是金魚腦XDD
不過由於只是自己的解題過程紀錄,所以不會是最高超的解題方式,
反而會偏向於比較容易懂的方式!
這次先來記錄一下,自己最不擅長的數學題QQ
image
題目需求:
n為任意數字,判斷n是否為2的次方(回傳true或false)。
解題過程:
1. 先排除小於1的數字,因為負數和0都不等於2的2次方。
2. 1雖然用2除不盡,但是2的0次方為1,所以如果n等於1,一定會先回傳true。
3. 接著讓我們從2開始判斷,把不是2的次方數的數字都挑出來,並回傳false。
4. 2一定是2的次方,所以在條件設定上,直接用n>2下去設定。
5. 在大於2的數字中,如果無法被2除盡,一定就不是2的次方數,所以一定要被挑出來回傳false。
=>看是否能被2除盡的部分利用算術運算子%,若n%2 不等於0,就代表除不盡。
6. 有些數字則是在第一次除以2時,可以被除盡,但是第二次開始就無法被2除盡,
代表這個數字不是純粹被2組成的數字a。
=>這種數字也就不是2的次方。
7.數字第一次用%看是否可以被除盡後,若可以除盡,再除2一次,看被除2後,是否還可以被2整除,以確認這個數字不是真的是2的次元。
8. 最終被這個過程過濾掉的數字,就會是2的次方。
程式碼內容:
image

完成!!
 
(繼續閱讀...)
文章標籤

文科少女寫程式 發表在 痞客邦 留言(0) 人氣(178)

  • 個人分類:LeetCode刷刷
▲top
1

個人資訊

文科少女寫程式
暱稱:
文科少女寫程式
分類:
數位生活
好友:
累積中
地區:

熱門文章

  • (27,154)【JavaScript萌新筆記】console.log到底是蝦米東東?
  • (6,271)【前端新手日記】CSS的row?column?傻傻分不清楚
  • (1,367)【前端新手日記】我就廢-自我挑戰紀錄:模擬電腦桌面
  • (990)【JavaScript萌新筆記】while迴圈練習題 - 限制10次內猜對數字的練習
  • (733)【前端新手日記】網頁開發必學!排版神器CSS-Flexbox
  • (229)【新創人森紀錄】什麼是新創公司?成為元老級員工初體驗
  • (197)【JavaScript萌新筆記】資料管理結構 - 陣列(array)的存取方式
  • (152)【課程學習心路歷程】這一個月的學習回顧-ORID
  • (107)【JavaScript萌新筆記】「事件迴圈 Event Loop」學習筆記
  • (85)【新創人森紀錄】五個月後的新創職場心得 - 新創不是人人都做得了

文章分類

toggle 打工仔人森 (3)
  • 菜逼八工程師心情雜記 (9)
  • 新創人森紀錄 (2)
  • 黑白的求職之路 (6)
  • 社群學習 (3)
  • LeetCode刷刷 (4)
  • 其他領域學習筆記 (5)
  • 抱佛腳學前端 (2)
  • 菜鳥Git學習筆記 (1)
  • 亂亂寫程式筆記 (15)
  • 關於學習的心路歷程 (4)
  • JavaScript初體驗 (23)
  • 前端新手村 (36)
  • 未分類文章 (1)

最新文章

  • 【JavaScript 萌新筆記】JavaScript 模組系統 - CommonJS 和 ES Module
  • 【前端新手日記】Tree Shaking 也許沒有真的 shaking 起來
  • 【前端學 Docker 】 不是圖片的 image- Docker Image
  • 【亂亂寫筆記】詐騙案例 - 用你信箱寄信警告信箱被盜用
  • 【前端新手日記】網頁渲染模式 - SSG、ISR
  • 【前端學 Docker 】 從認識 Container 開始
  • 【前端新手日記】網頁渲染模式 - CSR vs SSR
  • 【亂亂寫筆記】VS Code - ESLin 應出現的警告提示未顯示
  • 【JavaScript 萌新筆記】JavaScript 的內部插槽 (internal slots) 和內部方法 (internal methods)
  • 【前端新手日記】React Component - <Component />及Component()的寫法差異及效能優化技巧

最新留言

  • [25/05/23] 文科少女寫程式 於文章「【JavaScript萌新筆記】cons...」留言:
    你說的單引號是指 '' 嗎? 如果寫成 '123' 型別就...
  • [25/05/20] 訪客 於文章「【JavaScript萌新筆記】cons...」留言:
    請問使用字串的時候=後面的數值也要加單引號嗎?...
  • [24/09/23] 【讀書心得】華爾街命運之輪 於文章「【亂亂寫筆記】VS Code - ESL...」留言:
    good~~~!...
  • [24/05/03] TurboSmooth 於文章「【JavaScript萌新筆記】Map的...」留言:
    學習到了~!...
  • [23/01/11] c323274 於文章「【我是前端工程師!?】文科少女的前端工程...」發表了一則私密留言
  • [22/09/23] 王韋 於文章「【我是前端工程師!?】文科少女的前端工程...」發表了一則私密留言
  • [22/09/14] 王韋 於文章「【我是前端工程師!?】文科少女的前端工程...」發表了一則私密留言
  • [22/08/12] 魯蛇的大兵日記~ 於文章「【前端新手日記】React.js學習筆記...」留言:
    最後一張動圖好像放錯ㄌ,跟修改前的結果似乎沒有變。 然...
  • [22/04/12] 訪客 於文章「【JavaScript萌新筆記】條件判斷...」留言:
    回饋您這方面資訊,我是從 PTT搜尋引擎的排名,看...
  • [22/04/07] flymayday112 於文章「【前端新手日記】Vue.js學習筆記(1...」留言:
    讚一個...

動態訂閱

文章精選

文章搜尋

誰來我家

參觀人氣

  • 本日人氣:
  • 累積人氣: