LeetCode刷題筆記第26題

2022-06-16 12:06:09 字數 1008 閱讀 9791

題目:

給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。

不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用o(1) 額外空間的條件下完成。

題目分析:

做題之前一定要將題目分析的細緻一些,因為有些條件如果一旦不注意就會造成程式結果出現偏差或者執行不通過。首先該題目給出的是乙個有序的陣列,從舉的例子來看是乙個公升序陣列,然後題目要求我們在原地刪除重複元素,也就是不能動用額外的輔助空間,也就是說輔助陣列和集合是不能使用的,只能借助於輔助的變數來完成;

既然給定的陣列是有序的,那就可以使用快慢指標的做法來解決,其中快指標是用於遍歷整個陣列的,它在遍歷的過程中是會碰到重複的元素的,而慢指標一般情況下不會遍歷整個陣列,除非整個陣列本身就沒有重複的元素。演算法的整體思路如下:

1、初始化快慢指標,即慢指標初始值為陣列首元素的索引,快指標為慢指標的值+1

2、遍歷時,比較慢指標和快指標當前所指的值,如果相等則說明有重複元素,快指標值+1

3、如果不等,則說明遇到了不同的值,則先將慢指標向前移動一位,然後將快指標所指的值賦給慢指標當前所指的位置。

4、遍歷結束時,新陣列的長度即為慢指標+1;

整體的時間複雜度就為o(n),空間複雜度為o(1)。整個過程也不用經常大規模的移動陣列元素,有時候我們可能會以為這個演算法執行過程中會不會存在後面的值將前面的新陣列中的值覆蓋的情況,其實是完全不存在的,因為我們要知道慢指標指向的位置永遠是新陣列的最後乙個元素或者馬上要成為新陣列最後乙個元素的位置,而慢指標和快指標之間的「空擋」位置都是已經被遍歷過的元素,這些元素要麼是已經被移動到了新陣列中,要麼是重複的元素在快指標遍歷時就已經被過濾掉了。

public

int removeduplicates(int

nums)

}return slow+1;

}

LeetCode刷題筆記第35題

題目描述 給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。解題思路 最直接的想法就是使用二分查詢,如果有序陣列中含有與target值相等的元素,直接返回對應的索引值 如果沒有則在查詢完畢之後,返回對應...

演算法筆記 刷題2 6

b 習題7 7 複製字串中的母音字母 寫乙個函式將乙個字串按反序存放。在主函式中輸入乙個字串,通過呼叫該函式,得到該字串按反序存放後的字串,並輸出。一行字串。輸入字串反序存放後的字串。單獨佔一行。abcddcbastrlen s1 計算s1字串內的字元數 包括 0 include include i...

leetcode刷題筆記 第27題 移除元素

描述 給定乙個陣列 nums 和乙個值 val,你需要原地移除所有數值等於 val 的元素,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。示例 給定 nums 3,2,2,3...