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

سجلات ترميز الآلة الكاتبة: زيادة التبعية الثلاثية

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

Typescript Coding Chronicles: Increasing Triplet Subsequence

عرض المشكلة:

نظرًا لمصفوفة أعداد صحيحة، يتم إرجاع صحيح إذا كان هناك ثلاثية من المؤشرات (i، j، k) بحيث i

مثال 1:

  • الإدخال: الأعداد = [1,2,3,4,5]
  • الإخراج: صحيح
  • شرح: أي ثلاثي حيث i

مثال 2:

  • الإدخال: الأعداد = [5,4,3,2,1]
  • الإخراج: خطأ
  • شرح: لا يوجد ثلاثي موجود.

مثال 3:

  • الإدخال: الأعداد = [2,1,5,0,4,6]
  • الإخراج: صحيح
  • شرح: الثلاثي (3، 4، 5) صالح لأن nums[3] == 0

قيود:

  • 1
  • -2^31

متابعة:

هل يمكنك تنفيذ حل يعمل في التعقيد الزمني O(n) والتعقيد المكاني O(1)؟

عملية التفكير الأولية:

لحل هذه المشكلة بكفاءة، نحتاج إلى تتبع أصغر وثاني أصغر القيم التي تمت مواجهتها حتى الآن. وإذا وجدنا قيمة ثالثة أكبر من ثاني أصغر قيمة، فقد وجدنا ثلاثية متزايدة.

الحل الأساسي (القوة الغاشمة):

يتضمن حل القوة الغاشمة التحقق من جميع التوائم الثلاثية المحتملة لمعرفة ما إذا كان هناك واحد يلبي الشرط i

شفرة:

function increasingTripletBruteForce(nums: number[]): boolean {
    const n = nums.length;
    for (let i = 0; i 



تحليل تعقيد الوقت:

  • تعقيد الوقت: O(n^3)، حيث n هو طول المصفوفة. وذلك لأننا نتحقق من جميع التوائم الثلاثة المحتملة.
  • تعقيد المساحة: O(1)، حيث أننا لا نستخدم أي مساحة إضافية.

محددات:

حل القوة الغاشمة ليس فعالا وغير مناسب لأحجام المدخلات الكبيرة.

الحل الأمثل:

يتضمن الحل الأمثل التكرار عبر المصفوفة مع الحفاظ على متغيرين، الأول والثاني، اللذين يمثلان أصغر وثاني أصغر قيم تمت مواجهتها حتى الآن. إذا وجدنا قيمة أكبر من الثانية، فإننا نرجع صحيحا.

شفرة:

function increasingTriplet(nums: number[]): boolean {
    let first = Infinity;
    let second = Infinity;

    for (let num of nums) {
        if (num 



تحليل تعقيد الوقت:

  • تعقيد الوقت: O(n)، حيث n هو طول المصفوفة. نقوم بالتكرار خلال المصفوفة مرة واحدة.
  • تعقيد المساحة: O(1)، لأننا نستخدم فقط مقدارًا ثابتًا من المساحة الإضافية.

التحسينات على الحل الأساسي:

  • يعمل هذا الحل في وقت خطي ويستخدم مساحة ثابتة، مما يجعله الأمثل للقيود المحددة.

حالات الحافة والاختبار:

حالات الحافة:

  1. المصفوفة بترتيب تنازلي.
  2. يحتوي المصفوفة على ثلاثة عناصر بالضبط بترتيب متزايد.
  3. تحتوي المصفوفة على عدد كبير من العناصر بدون زيادة ثلاثية.
  4. تحتوي المصفوفة على نسخ مكررة.

حالات تجريبية:

console.log(increasingTripletBruteForce([1,2,3,4,5])); // true
console.log(increasingTripletBruteForce([5,4,3,2,1])); // false
console.log(increasingTripletBruteForce([2,1,5,0,4,6])); // true
console.log(increasingTripletBruteForce([1,1,1,1,1])); // false
console.log(increasingTripletBruteForce([1,2])); // false
console.log(increasingTripletBruteForce([1,2,3])); // true
console.log(increasingTripletBruteForce([1,5,0,4,1,3])); // true

console.log(increasingTriplet([1,2,3,4,5])); // true
console.log(increasingTriplet([5,4,3,2,1])); // false
console.log(increasingTriplet([2,1,5,0,4,6])); // true
console.log(increasingTriplet([1,1,1,1,1])); // false
console.log(increasingTriplet([1,2])); // false
console.log(increasingTriplet([1,2,3])); // true
console.log(increasingTriplet([1,5,0,4,1,3])); // true

الاستراتيجيات العامة لحل المشكلات:

  1. فهم المشكلة: اقرأ بيان المشكلة بعناية لفهم المتطلبات والقيود.
  2. تحديد العمليات الرئيسية: تحديد العمليات الرئيسية المطلوبة، مثل تتبع أصغر وثاني أصغر القيم.
  3. تحسين الكفاءة: استخدم الخوارزميات وهياكل البيانات الفعالة لتقليل تعقيد الزمان والمكان.
  4. اختبار شامل: اختبر الحل مع حالات مختلفة، بما في ذلك حالات الحافة، للتأكد من صحته.

تحديد المشاكل المشابهة:

  1. مشاكل المصفوفات الفرعية:

    • المشاكل التي تحتاج فيها إلى العثور على مصفوفات فرعية ذات خصائص محددة.
    • مثال: العثور على الحد الأقصى لمجموع المصفوفة الفرعية (خوارزمية كادان).
  2. تقنية المؤشرين:

    • المشكلات التي يمكن أن يساعد فيها استخدام مؤشرين في تحسين الحل.
    • مثال: إزالة التكرارات من مصفوفة مرتبة.
  3. الخوارزميات الموضعية:

    • المشاكل التي تتطلب تنفيذ العمليات في مكانها مع مساحة إضافية محدودة.
    • مثال: تدوير مصفوفة إلى اليمين بخطوات k.

خاتمة:

  • يمكن حل مشكلة إيجاد متتالية ثلاثية متزايدة بكفاءة باستخدام كل من أسلوب القوة الغاشمة والحل الأمثل مع الزمن الخطي والتعقيد المكاني الثابت.
  • إن فهم المشكلة وتقسيمها إلى أجزاء يمكن التحكم فيها أمر بالغ الأهمية.
  • يضمن استخدام الخوارزميات الفعالة أن الحل الأمثل للمدخلات الكبيرة.
  • يضمن الاختبار باستخدام حالات الحافة المختلفة المتانة.
  • يمكن أن يساعد التعرف على أنماط المشكلات في تطبيق حلول مماثلة لتحديات أخرى.

من خلال ممارسة مثل هذه المشكلات والاستراتيجيات، يمكنك تحسين مهاراتك في حل المشكلات والاستعداد بشكل أفضل لمواجهة تحديات البرمجة المختلفة.

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/__zamora__/typescript-coding-chronicles-increasing-triplet-subsequence-207l?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3