給定乙個陣列 nums 和乙個值 val,你需要原地移除所有數值等於 val 的元素,返回移除後陣列的新長度。
不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o(1) 額外空間的條件下完成。
元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。
示例 1:
給定 nums = [3,2,2,3], val = 3,
函式應該返回新的長度 2, 並且 nums 中的前兩個元素均為 2。
你不需要考慮陣列中超出新長度後面的元素。
示例 2:
給定 nums = [0,1,2,2,3,0,4,2], val = 2,
函式應該返回新的長度 5, 並且 nums 中的前五個元素為 0, 1, 3, 0, 4。
注意這五個元素可為任意順序。
你不需要考慮陣列中超出新長度後面的元素。
說明:
為什麼返回數值是整數,但輸出的答案是陣列呢?
請注意,輸入陣列是以「引用」方式傳遞的,這意味著在函式裡修改輸入陣列對於呼叫者是可見的。
你可以想象內部操作如下:
// nums 是以「引用」方式傳遞的。也就是說,不對實參作任何拷貝
int len = removeelement(nums, val);
// 在函式裡修改輸入陣列對於呼叫者是可見的。
// 根據你的函式返回的長度, 它會列印出陣列中該長度範圍內的所有元素。
for (int i = 0; i < len; i++)
思路:遍歷陣列找到傳入的val值的位置,在傳入的陣列中刪除此數,並且計數,最後返回原來陣列長度-計數器值
注意點:由於刪除陣列元素的splice
函式,在執行之後會改變原來陣列的長度,所以在刪除元素的時候,需要i–。
比如[3,2,3,3]
要刪除3,當i=0&&i<4時,就要刪除第乙個位置的值
刪除以後變成[2,3,3]
長度發生了改變,迴圈條件變成i=1&&i<3
很明顯如果不讓i–回到0的話,下一趟的迴圈就是從之前刪除的那個值後面值開始。
**
var
removeelement
=function
(nums, val)
}return nums_length-count;
//最後返回原長度-重複數
在leetcode上通過了編譯
在我看別人題解的時候,發現,哦,大佬就是大佬。
var
removeelement
=function
(nums, val)
}return len;
};
思路:
遍歷陣列,當有與val不相等的數時,就依次對原陣列進行資料覆蓋
最後返回覆蓋了的個數就可以了
相比之下,沒有splice
函式的執行過程,**更加精準,簡易。
剛開始自己只想到當真要刪除這個資料的空間,卻沒想到可以對原有的陣列進行個別值的覆蓋。
演算法營day9
題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。思路 如果乙個陣列中,只有乙個數字出現一次的話,求這個數的?將序列中的所有數字異或,因為相同的數字異或會為0,乙個不為0的數字異或還是這個數字本身。這個題可以轉換為上述的題,將序列中的所有數字異或,...
刷題筆記day9
pat a1012 the best rank 25分 此題的坑點是,排名涉及並列名次,存在並列第一,並列第三的情況,計算排名時要特別考慮。include include include struct stus 2005 int cmpc const void a,const void b int ...
雙指標演算法 day 9
樸素做法模板 for int i 0 i n i for int j 0 j i j if check j,i 雙指標演算法模板 for int i 0,j 0 i n i 問題 最長連續不重複子序列 給定乙個長度為n的整數序列,請找出最長的不包含重複數字的連續區間,輸出它的長度。輸入格式 第一行包...