演算法題Day9 移除元素

2021-09-28 12:26:32 字數 1728 閱讀 5350

給定乙個陣列 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的整數序列,請找出最長的不包含重複數字的連續區間,輸出它的長度。輸入格式 第一行包...