سوال 80
عنوان سوال : Remove Duplicates from Sorted Array II
- متوسط
- دو اشاره گر
- آرایه
یک آرایهٔ عدد صحیح nums داده شده که بهصورت صعودی (non-decreasing) مرتب شده است.
باید تکراریها را بهصورت درجا (in-place) طوری حذف کنید که هر عنصر حداکثر دو بار در آرایه ظاهر شود.
ترتیب عناصر نیز باید حفظ شود.
پس از حذف اضافهها، تعداد عناصر معتبر را k بنامید.
باید k را برگردانید و k عنصر اول آرایه شامل نتیجهٔ نهایی باشد.
عناصر بعد از اندیس k - 1 اهمیتی ندارند.
مثال ۱
ورودی:
nums = [1,1,1,2,2,3]
خروجی:
k = 5
nums = [1,1,2,2,3,_]
توضیح:
عنصر 1 بیش از دو بار تکرار شده بود، بنابراین یک نسخهٔ اضافی آن حذف شد.
مثال ۲
ورودی:
nums = [0,0,1,1,1,1,2,3,3]
خروجی:
k = 7
nums = [0,0,1,1,2,3,3,_,_]
توضیح:
عنصر 1 چهار بار آمده بود، که فقط دو بار آن باقی میماند.
محدودیتها
1 <= nums.length <= 3 * 10^4-10^4 <= nums[i] <= 10^4- آرایه بهصورت صعودی مرتب شده است.
راه حل
public class Solution {
public int RemoveDuplicates(int[] nums) {
if(nums.Length==0){
return 0;
}
if(nums.Length==1){
return 1;
}
var unique= 2;
for(var i=2; i<nums.Length;i++){
if(nums[i] != nums[unique-1] || nums[i] != nums[unique-2]){
nums[unique] = nums[i];
unique++;
}
}
return unique;
}
}