做宣傳冊模板的網(wǎng)站域名注冊商怎么查
1、題目:
對給定的有序數(shù)組 nums 刪除重復(fù)元素,在刪除重復(fù)元素之后,每個元素只出現(xiàn)一次,并返回新的長度,上述操作必須通過原地修改數(shù)組的方法,使用 O(1) 的空間復(fù)雜度完成。
2、分析特點:
- 題目要求:原地修改、
有序數(shù)組
- 原地+刪除 ==>
結(jié)果數(shù)組一定比原數(shù)組的長度更短
,并且,我們可以把結(jié)果數(shù)組直接寫在原數(shù)組上
。 - 有序數(shù)組 ==> 當(dāng)前元素和前一個元素是相等的時候,則不需要收集,
我們需要收集的元素,是那些不會等于前一個元素的,充分利用有序的特點
,繼續(xù)往前遍歷,只要不等于前一個元素,就可以收集起來,等于了就放棄,比如 2 3 3,第一個 3 作為當(dāng)前元素的時候,和前一個元素不相等,可以收集起來,到了第二個 3 和前一個元素相等了,放棄收集。
3、特點:
有序數(shù)組,剔除掉相等的,拿當(dāng)前位置的元素去和前一個元素比較 ,即if (nums[fast] != nums[fast - 1]); 并且 0 位置的元素早就進(jìn)入結(jié)果集,需要看后面的元素是否進(jìn)結(jié)果,則定義的兩個指針開始判斷收集的起點下標(biāo)從1開始。
定義兩個指針 fast 和 slow 分別為快指針和慢指針,
快指針表示遍歷原數(shù)組到達(dá)的下標(biāo)位置,慢指針表示結(jié)果數(shù)組的下標(biāo)位置,即下一個不同元素要填入的下標(biāo)位置,初始時兩個指針都指向下標(biāo) 1。
快指針的范圍是從 1 到 最后一個元素位置;
慢指針是從 1 開始不斷根據(jù)快指針滿足了條件就加入收集結(jié)果(前提,0位置的元素早就進(jìn)入了結(jié)果,需要看后面的元素是否進(jìn)結(jié)果);
4、代碼:
public int removeDuplicates(int[] nums) {int n = nums.length;if (n == 0) {return 0;}int slow = 1;for(int fast = 1; fast < n; fast++){if (nums[fast] != nums[fast - 1]) {nums[slow] = nums[fast];++slow;}}return slow;}
5、復(fù)雜度分析:
- 時間復(fù)雜度:O(n),其中 n 是數(shù)組的長度。快指針和慢指針最多各移動 n 次。
- 空間復(fù)雜度:O(1)。只需要使用常數(shù)的額外空間。
6、總結(jié):
有序數(shù)組,剔除掉相等的,拿當(dāng)前位置的元素去和前一個元素比較,即if (nums[fast] != nums[fast - 1]); 并且 0 位置的元素早就進(jìn)入結(jié)果集,需要看后面的元素是否進(jìn)結(jié)果,則定義的兩個指針開始判斷收集的起點下標(biāo)從1開始。
如果本文對你有幫助的話記得給一樂點個贊哦,感謝!