برنامه نویسی

Leetcode Day 8: Remove Element Explained

Summarize this content to 400 words in Persian Lang
مشکل به شرح زیر است:

یک آرایه عدد صحیح داده شده است nums و یک عدد صحیح val، حذف همه موارد از val که در nums درجا. ترتیب عناصر ممکن است تغییر کند. سپس آن را برگردانید تعداد عناصر در nums که برابر نیستند val.

تعداد عناصر موجود در آن را در نظر بگیرید nums که برابر نیستند val بودن k، برای پذیرش باید موارد زیر را انجام دهید:

آرایه را تغییر دهید nums به طوری که اولین k عناصر nums حاوی عناصری است که با آنها برابر نیستند val. عناصر باقی مانده از nums مهم نیست و همچنین اندازه nums.
بازگشت k.

قاضی سفارشی:

قاضی راه حل شما را با کد زیر آزمایش می کند:

int[] nums = […]; // Input array
int val = …; // Value to remove
int[] expectedNums = […]; // The expected answer with correct length.
// It is sorted with no values equaling val.

int k = removeElement(nums, val); // Calls your implementation

assert k == expectedNums.length;
sort(nums, 0, k); // Sort the first k elements of nums
for (int i = 0; i

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگر همه ادعاها تایید شود، راه حل شما پذیرفته خواهد شد.

مثال 1:

Input: nums = [3,2,2,3], val = 3
Output: 2, nums = [2,2,_,_] Explanation: Your function should return k = 2, with the first two elements of nums being 2.
It does not matter what you leave beyond the returned k (hence they are underscores).

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مثال 2:

Input: nums = [0,1,2,2,3,0,4,2], val = 2
Output: 5, nums = [0,1,4,0,3,_,_,_] Explanation: Your function should return k = 5, with the first five elements of nums containing 0, 0, 1, 3, and 4.
Note that the five elements can be returned in any order.
It does not matter what you leave beyond the returned k (hence they are underscores).

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در اینجا این است که چگونه آن را حل کردم:

برای حل این مشکل از دو استراتژی اصلی استفاده کردم:

تعویض در محل: به جای ایجاد یک آرایه جدید برای ذخیره عناصری که برابر نیستند val، از همان آرایه استفاده کنید nums برای بازنویسی عناصری که باید حذف شوند.

تکنیک دو نقطه ای: یک اشاره گر (i) از طریق هر عنصر آرایه و یک اشاره گر دیگر (k) موقعیتی را که عنصر غیر val بعدی باید در آن قرار گیرد را پیگیری می کند.

ابتدا یک اشاره گر را مقداردهی اولیه کنید k و آن را روی 0 تنظیم کنید. با این کار موقعیتی که عنصر غیر val بعدی باید در آن قرار گیرد را پیگیری می کند.

class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
k = 0

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تکرار از طریق آرایه اعداد.
بررسی کنید که آیا عنصر فعلی شماره دارد یا خیر[i] از val برای پیگیری k متفاوت است.
اگر چنین است، اعداد عنصر را جابجا کنید[i] به موقعیت k-ام، و برای به روز رسانی موقعیت برای عنصر غیر val بعدی، k را 1 افزایش دهید.

for i in range(len(nums)):
if nums[i] != val:
nums[k] = nums[i] k += 1

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

k را برمی‌گردانیم که تعداد عناصری است که برابر val نیستند.

return k

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در اینجا راه حل کامل شده است:

class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
k = 0
for i in range(len(nums)):
if nums[i] != val:
nums[k] = nums[i] k += 1
return k

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مشکل به شرح زیر است:

یک آرایه عدد صحیح داده شده است nums و یک عدد صحیح val، حذف همه موارد از val که در nums درجا. ترتیب عناصر ممکن است تغییر کند. سپس آن را برگردانید تعداد عناصر در nums که برابر نیستند val.

تعداد عناصر موجود در آن را در نظر بگیرید nums که برابر نیستند val بودن k، برای پذیرش باید موارد زیر را انجام دهید:

  • آرایه را تغییر دهید nums به طوری که اولین k عناصر nums حاوی عناصری است که با آنها برابر نیستند val. عناصر باقی مانده از nums مهم نیست و همچنین اندازه nums.
  • بازگشت k.

قاضی سفارشی:

قاضی راه حل شما را با کد زیر آزمایش می کند:

int[] nums = [...]; // Input array
int val = ...; // Value to remove
int[] expectedNums = [...]; // The expected answer with correct length.
                            // It is sorted with no values equaling val.

int k = removeElement(nums, val); // Calls your implementation

assert k == expectedNums.length;
sort(nums, 0, k); // Sort the first k elements of nums
for (int i = 0; i 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگر همه ادعاها تایید شود، راه حل شما پذیرفته خواهد شد.

مثال 1:

Input: nums = [3,2,2,3], val = 3
Output: 2, nums = [2,2,_,_]
Explanation: Your function should return k = 2, with the first two elements of nums being 2.
It does not matter what you leave beyond the returned k (hence they are underscores).
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مثال 2:

Input: nums = [0,1,2,2,3,0,4,2], val = 2
Output: 5, nums = [0,1,4,0,3,_,_,_]
Explanation: Your function should return k = 5, with the first five elements of nums containing 0, 0, 1, 3, and 4.
Note that the five elements can be returned in any order.
It does not matter what you leave beyond the returned k (hence they are underscores).
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در اینجا این است که چگونه آن را حل کردم:

برای حل این مشکل از دو استراتژی اصلی استفاده کردم:

  1. تعویض در محل: به جای ایجاد یک آرایه جدید برای ذخیره عناصری که برابر نیستند val، از همان آرایه استفاده کنید nums برای بازنویسی عناصری که باید حذف شوند.
  2. تکنیک دو نقطه ای: یک اشاره گر (i) از طریق هر عنصر آرایه و یک اشاره گر دیگر (k) موقعیتی را که عنصر غیر val بعدی باید در آن قرار گیرد را پیگیری می کند.
  • ابتدا یک اشاره گر را مقداردهی اولیه کنید k و آن را روی 0 تنظیم کنید. با این کار موقعیتی که عنصر غیر val بعدی باید در آن قرار گیرد را پیگیری می کند.
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:       
    k = 0
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • تکرار از طریق آرایه اعداد.
  • بررسی کنید که آیا عنصر فعلی شماره دارد یا خیر[i] از val برای پیگیری k متفاوت است.
  • اگر چنین است، اعداد عنصر را جابجا کنید[i] به موقعیت k-ام، و برای به روز رسانی موقعیت برای عنصر غیر val بعدی، k را 1 افزایش دهید.
for i in range(len(nums)):
    if nums[i] != val:
        nums[k] = nums[i]
        k += 1
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • k را برمی‌گردانیم که تعداد عناصری است که برابر val نیستند.
return k
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در اینجا راه حل کامل شده است:

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        k = 0
        for i in range(len(nums)):
            if nums[i] != val:
                nums[k] = nums[i]
                k += 1
        return k
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا