سوال 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;
    }
}

کپی رایت © mhkarami97