"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > شرح عنصر إزالة يوم Leetcode

شرح عنصر إزالة يوم Leetcode

تم النشر بتاريخ 2024-07-30
تصفح:227

Leetcode Day Remove Element Explained

المشكلة هي على النحو التالى:

نظرًا لمصفوفة أعداد صحيحة وقيمة صحيحة، قم بإزالة كافة تكرارات val في الأعداد في المكان. قد يتغير ترتيب العناصر. ثم قم بإرجاع عدد العناصر بالأرقام التي لا تساوي val.

ضع في اعتبارك عدد العناصر في الأعداد التي لا تساوي val be k، للحصول على القبول، عليك القيام بالأمور التالية:

  • قم بتغيير أرقام المصفوفة بحيث تحتوي عناصر k الأولى من الأرقام على عناصر لا تساوي val. العناصر المتبقية من الأعداد ليست مهمة وكذلك حجم الأعداد.
  • عودة ك.

القاضي المخصص:

سيختبر القاضي الحل الخاص بك باستخدام الكود التالي:

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، استخدم نفس أرقام المصفوفة للكتابة فوق العناصر التي تحتاج إلى إزالتها.
  2. تقنية المؤشرين: مؤشر واحد (i) يتكرر خلال كل عنصر في المصفوفة، ومؤشر آخر (k) يتتبع الموضع الذي يجب أن يوضع فيه العنصر غير Val التالي.
  • أولاً، قم بتهيئة المؤشر k واضبطه على 0. سيؤدي هذا إلى تتبع الموضع الذي يجب وضع العنصر غير Val التالي فيه.
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:       
    k = 0
  • التكرار من خلال مصفوفة الأعداد.
  • تحقق مما إذا كان العنصر الحالي nums[i] مختلفًا عن val لتتبع k.
  • إذا كان الأمر كذلك، انقل العنصر nums[i] إلى الموضع k، وقم بزيادة k بمقدار 1 لتحديث موضع العنصر التالي غير val.
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
بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/simona-cancian/leetcode-day-8-remove-element-explained-212a?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3