iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0
自我挑戰組

非資工本科的Leetcode刷題筆記系列 第 4

Day 4 - Arrays 101 - In-Place Operation

  • 分享至 

  • xImage
  •  

Arrays 101 最後一個小節是講in-place operations,中文翻譯是叫做原地操作,它的概念是說,不管今天是要對陣列做排序還是任何運算操作,都只在同一個陣列進行,不會另外建立一個新的陣列去儲存結果。

舉例來說,我們現在有個int[] a = {3, 2, 4, 1};的陣列,對它進行排序操作之後是a = {1, 2, 3, 4};而不是b = {1, 2, 3, 4};不建立新的陣列就可以達到我們想要的目的這樣的操作就算是原地操作

這個做法的好處在於節省空間,要記得,當我們new一個東西時,不管是變數、陣列還是其他物件,都會在記憶體挖一個空間出來儲存資料,我們每複製一個陣列,佔用的空間就會倍數成長,直到系統拋出Out of Memory 的例外。

A Better Repeated Deletion Algorithm

原地操作的部分很快就結束了,但這個小節有使用原地操作展示一個更好的刪除演算法。

假設我們取得的陣列是INPUT,我們想要的結果是OUTPUT,目的是刪除裡面重複的元素。

INPUT: [0, 0, 1, 1, 2, 3, 3, 4]
OUTPUT: [0, 1, 2, 3, 4]

在學習原地操作以前,最直觀的解法可能是建立一個新的陣列去儲存元素並回傳,如下圖:

https://ithelp.ithome.com.tw/upload/images/20230919/20140728TNqwVE8Nr1.png

但這邊我們可以使用原地操作,不斷交換第一次出現的元素到前面,然後length 變數設定在尾端,這樣我們就可以根據length 的位置,在同一個陣列操作不重複的元素。

https://ithelp.ithome.com.tw/upload/images/20230919/20140728If0TOsarz1.png

LeetCode Problem

在In-Place Operations 的章節裡就出了五道題目,不過有兩題是跟Deleting Items From an Array 的章節一樣,應該是想要讀者用原地操作去重新寫那兩道題目吧。

這邊還有再加上Arrays 101 最後Conclusion 章節的題目,其中個人認為比較難的是448 題,雖然也是Easy 的題目,但是這整個Explore Card 寫完唯一上網找答案的,那個解法真是讓人意想不到啊!!!

總結

Arrays 101 最後總結了這個Explore Card 的內容:

  • 了解陣列的資料結構
  • 知道如何建立一個陣列
  • 會使用陣列的讀寫操作
  • 會使用基礎的新增、刪除和搜尋演算法
  • 知道原地操作的概念
  • 完成所有題目,你應該感覺有趣且興奮!

最後還埋了兩個伏筆,Two PointerCircular Array,這將是未來的Explore Card 的內容,更多的陣列操作技巧!


參考資料

Explore - LeetCode


上一篇
Day 3 - Arrays 101 - Array Operation
下一篇
Day 5 - Arrays 101 - Problem 1
系列文
非資工本科的Leetcode刷題筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言