切換
舊版
前往
大廳
主題

LeetCode - 27. Remove Element 解題心得

Not In My Back Yard | 2020-07-31 00:00:05 | 巴幣 0 | 人氣 237

題目連結:


題目意譯:
給定一個陣列 nums 以及一個值 val ,原地(In-Place)移除所有與 val 相等的值並回傳新的陣列長度。

請勿分配記憶體空間給另一個陣列,你只應藉由 O(1) 的額外空間並原地(In-Place)地更改輸入陣列。

元素的順序可以被改變,且新的陣列長度之後的字元是什麼都沒關係(意即只看前「回傳長度」個字元)。



說明:

為何明明回傳值是一個整數,但是你出現的答案卻是一個陣列?

注意輸入陣列是以「傳入參考」(Pass by Reference)進來的,其代表關於輸入陣列的任意更動,外層的函式呼叫者(Caller)也會接收到該更動。

總之,你可以想成為以下:

// 以「傳入參考」傳進 nums (換句話說,不做任何的複製)
int len = removeElement(nums, val);

// 關於輸入陣列的任意更動,外層的函式呼叫者(Caller)都會接受到。
// 藉由你的函式回傳的長度,其輸出前 len 個元素。
for (int i = 0; i < len; i++) {
  print(nums[i]);
}



範例測資:
範例 1:
給定 nums = [3,2,2,3] 、 val = 3,
你的函式應回傳長度 length = 2 ,且 nums 的前兩個元素應皆為 2 。
長度 length 之後的字元(此為第 3 個元素(含)後)是何物都沒關係。

範例 2:
給定 nums = [0,1,2,2,3,0,4,2] 、 val = 2,
你的函式應回傳長度 length = 5 ,且 nums 的前五個元素應依序為 0 、 1 、 3 、 0 以及 4 。
注意,該五個元素可以是任意順序排列。
長度 length 之後的字元(此為第 6 個元素(含)以後)被設定任何值都沒關係。



解題思維:
昨天的題目類似,用一個變數儲存不等於 val 的元素現在應該放在哪個位置。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作