اذهب إلى المحتوى

السؤال

نشر

السلام عليكم

دي المساله

You are given an integer array nums.

You are allowed to delete any number of elements from nums without making it empty. After performing the deletions, select a subarray of nums such that:

All elements in the subarray are unique.
The sum of the elements in the subarray is maximized.
Return the maximum sum of such a subarray.

 

ودي الحل بتاعي هل يوجد افضل من كده

max_sum = float('-inf')
current_sum = 0
if len(array) != len(set(array)):

    for num in set(array):
        current_sum += num
        max_sum = max(max_sum, current_sum)

        if current_sum < 0:
            current_sum = 0

else:

     for num in array:
        current_sum += num
        max_sum = max(max_sum, current_sum)

        if current_sum < 0:
            current_sum = 0

 

Recommended Posts

  • 0
نشر

الحل غير صحيح، المطلوب إيجاد أكبر مجموع لـ subarray متتالي أي عناصر متجاورة في المصفوفة الأصلية بحيث، جميع عناصر الـ subarray فريدة ويُسمح بحذف أي عدد من العناصر من المصفوفة الأصلية لكن يجب أن يبقى الsubarray متتاليًا بعد الحذف.

لكل قيمة فريدة في المصفوفة، تتبع الحد الأقصى لتكرار تلك القيمة، وتستطيع ببساطة تخزين القيمة الفريدة نفسها وكأنها الحد الأقصى لتكرارها، وانتبه إلى أنّ تتبع الحد الأقصى للتكرار لا يعني عد مرات الظهور بالمعنى الحرفي، بل التعامل مع كل قيمة فريدة مرة واحدة فقط، واختيار القيمة نفسها كممثل لها.

ثم جمع الحدود القصوى لتكرارات كل قيمة فريدة فقط إن كانت موجبة، ولو المصفوفة تحتوي فقط على قيم سالبة أو صفر، ستقوم بإرجاع العنصر الأكبر في المصفوفة الأصلية.

كالتالي:

class Solution:
    def maxSum(self, nums):
        max_sum = 0
        current_sum = 0
        unique_elements = set()
        left = 0  
        
        for right in range(len(nums)):
            while nums[right] in unique_elements:
                unique_elements.remove(nums[left])
                current_sum -= nums[left]
                left += 1
            
            unique_elements.add(nums[right])
            current_sum += nums[right]
            
            if current_sum > max_sum:
                max_sum = current_sum
        
        return max_sum if max_sum != 0 else max(nums)

وتلك نسخة أقصر من الكود:

class Solution(object):
    def maxSum(self, nums):
        ans = 0
        for num in set(nums):
            if num > 0:
                ans += num
        return ans if ans else max(nums)

 

  • 0
نشر

وعليكم السلام ورحمة الله،

عند استخدام هذا السطر:

for num in set(array):

سيتم التكرار عبر العناصر بترتيب عشوائي على سبيل المثال، إذا كانت مصفوفة الأعداد هي:

[2, -1, 3, -1]

فإن ترتيب واحد مثل [2, -1, 3] قد يعطي مجموعا تراكميا 2 ،1 ، 4 بإجمالي 4 بينما ترتيب آخر مثل [2, 3, -1] قد يعطي 2 ، 5 ، 4 بإجمالي 5.

وأيضا عندما توجد أعداد موجبة، الاستراتيجية المثلى هي استبعاد الأعداد السالبة لأن وجودها يقلل من المجموع الكلي في هذه المشكلة، إذا كان هناك عدد موجب واحد على الأقل، يمكنك دائما حذف الأعداد السالبة بحيث يكون المجموع الأمثل هو مجموع كل الأعداد الموجبة المميزة (الصفر لا يؤثر على المجموع) في حلّك قد تتم إضافة بعض الأعداد السالبة من المجموعة مما يقلل من المجموع.

وبما أنه مسموح لك بحذف أي عناصر، يمكنك دائما تشكيل مصفوفة فرعية (Subarray) تحتوي على كل عدد مفيد (أي موجب) مرة واحدة فقط. الحل الأمثل هو:

  • إذا كان هناك عدد موجب على الأقل: احسب مجموع جميع الأعداد الموجبة المميزة.
  • إذا لم توجد أعداد موجبة: قم بإرجاع أكبر عنصر أي العدد "الأقل سلبية".
  • 0
نشر

وعليكم السلام ورحمة الله وبركاته.

الحل صحيح في بعض الحالات ولكن في حالات أخرى خاطئ لهذا فإن هذا الحل لن يتم قبوله على الموقع .

لاحظ أنك لا تقوم بالتأكد من الرقم هل هو موجب أم سالب . حيث إذا كان سالبا لا يجب وضعه في المجموع لديك .

أيضا لاحظ أنك تقوم بتكرار الكود هو هو مرتين مرة في else ومرة بداخل if الإختلاف هو فقط في إذا كان تم حذف القيم الفريدة أم لا من خلال إستخدام set.

لهذا يمكنك فقط وضع جزء واحد من الكود وتحويل set مباشرة .

لهذا قم بتحويل المصفوفة إلى set مباشرة ومن ثم التكرار على عناصر set الجديدة وجمع الرقم إذا كان موجبا وعدم جمعه إذا كان سالبا. 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...