Menu
CoddyTech

Count Inversions

معطاة قائمة من الأعداد الصحيحة nums، أعد عدد الانقلابات: أزواج الفهارس i < j التي يكون فيها nums[i] > nums[j]، أي قيمة أكبر تسبق قيمة أصغر. القيم المتساوية لا تشكّل انقلابًا أبدًا، والقائمة المرتبة لا تحتوي على أي انقلاب.

الدالة

countInversions(nums: integer-array) → integer
numsinteger-array
قائمة الأعداد الصحيحة
تُرجعinteger
عدد الأزواج i < j التي تحقق nums[i] > nums[j]

القيود

  • 1 ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • الإجابة لا تتجاوز n(n-1)/2 < 2 × 108، لذا فهي تناسب عددًا صحيحًا موقّعًا من 32 بت.

أمثلة

المدخلات
nums = [5, 3, 8, 1, 4]
المخرجات
6
الشرح
يأتي 5 قبل 3 و1 و4: 3 أزواج. يأتي 3 قبل 1، ويأتي 8 قبل 1 و4: 3 أزواج أخرى. 1 و4 بالترتيب، لذا فالمجموع 6.
challenge icon

سؤال إضافي

ما الذي يتغير إذا احتُسب الزوج فقط عندما يكون nums[i] > 2 × nums[j]؟ هل لا يزال بإمكان فرز الدمج احتساب هذه الأزواج في O(n log n)؟

إعادة ضبط الشيفرة
def countInversions(nums):
    # اكتب الكود هنا

اختبار #1

اختبار #2

اختبار #3

وسيط

nums = [5, 3, 8, 1, 4]

الإخراج المتوقع

6