題目連結:
題目意譯:
給定一個陣列 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 的元素現在應該放在哪個位置。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。