leetcode80. 删除排序数组中的重复项 II
給定一個(gè)排序數(shù)組,你需要在原地刪除重復(fù)出現(xiàn)的元素,使得每個(gè)元素最多出現(xiàn)兩次,返回移除后數(shù)組的新長(zhǎng)度。
不要使用額外的數(shù)組空間,你必須在原地修改輸入數(shù)組并在使用 O(1) 額外空間的條件下完成。
示例?1:
給定 nums = [1,1,1,2,2,3],
函數(shù)應(yīng)返回新長(zhǎng)度 length = 5, 并且原數(shù)組的前五個(gè)元素被修改為 1, 1, 2, 2, 3 。
你不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素。
示例?2:
給定 nums = [0,0,1,1,1,1,2,3,3],
函數(shù)應(yīng)返回新長(zhǎng)度 length = 7, 并且原數(shù)組的前五個(gè)元素被修改為?0, 0, 1, 1, 2, 3, 3 。
你不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素。
說(shuō)明:
為什么返回?cái)?shù)值是整數(shù),但輸出的答案是數(shù)組呢?
請(qǐng)注意,輸入數(shù)組是以“引用”方式傳遞的,這意味著在函數(shù)里修改輸入數(shù)組對(duì)于調(diào)用者是可見(jiàn)的。
你可以想象內(nèi)部操作如下:
// nums 是以“引用”方式傳遞的。也就是說(shuō),不對(duì)實(shí)參做任何拷貝
int len = removeDuplicates(nums);
// 在函數(shù)里修改輸入數(shù)組對(duì)于調(diào)用者是可見(jiàn)的。
// 根據(jù)你的函數(shù)返回的長(zhǎng)度, 它會(huì)打印出數(shù)組中該長(zhǎng)度范圍內(nèi)的所有元素。
for (int i = 0; i < len; i++) {
????print(nums[i]);
}
思路:修修補(bǔ)補(bǔ)老半天,其實(shí)就兩個(gè)指針往后統(tǒng)計(jì)+賦值。
注意保證最后一次賦值順利進(jìn)行:如i<=length,if(i!=length)
class Solution {public int removeDuplicates(int[] nums) {if(nums.length==0)return 0;int index=0;int target=nums[0];int num=0;for(int i=1;i<=nums.length;i++){if(i!=nums.length && target==nums[i]){num++;}else{nums[index++]=target;if(num>0){num=0;nums[index++]=target;}if(i!=nums.length)target=nums[i];}}return index;} }總結(jié)
以上是生活随笔為你收集整理的leetcode80. 删除排序数组中的重复项 II的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux-在cenos上安装大全(ng
- 下一篇: 算法指导图