TypeScript على LeetCode: من المبتدئ إلى المحترف في 30 يومًا

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا TypeScript هي اللغة المثالية لـ LeetCode؟

\n\n

إذا كنت لا تزال تحل المشاكل على LeetCode باستخدام JavaScript - فقد حان الوقت للانتقال إلى TypeScript. لماذا؟ لأن التصنيف الصارم (strict typing) يقطع فئة كاملة من الأخطاء قبل تشغيل الكود. لن تتمكن من تمرير سلسلة نصية عن طريق الخطأ حيث يُتوقع رقم، وسيخبرك المترجم (compiler) بالطرق المتاحة للكائن. الأمر أشبه بقيادة سيارة مع طيار آلي - أسرع وأكثر أمانًا وأكثر متعة.

\n\n

LeetCode ليست مجرد منصة لحفظ الخوارزميات. إنها ساحة تدريب تصقل فيها المهارات المطلوبة فعليًا في بيئة الإنتاج. و TypeScript اليوم هو المعيار الفعلي (de facto) لتطوير المؤسسات. شركات مثل Google و Microsoft و Airbnb تبحث عن مطورين يجيدون كتابة الكود المُصنّف. لذا، بحل مشاكل LeetCode باستخدام TypeScript، أنت تقتل عصفورين بحجر واحد: تستعد للمقابلة وتطور مهارات حقيقية.

\n\n

في هذه المقالة، سنشرح من أين تبدأ، وما هي الأنواع وهياكل البيانات التي يجب تعلمها، وسنمر على 3 مشاكل بمستويات مختلفة - من السهل إلى الصعب. هيا بنا!

\n\n

ما تحتاج معرفته قبل البدء

\n\n

قبل الغوص في مجموعة المشاكل، تأكد من أن لديك الأساسيات. TypeScript هي طبقة فوق JavaScript، لذا يجب أولاً إتقان JS: الإغلاقات (closures)، الوعود (promises)، طرق المصفوفات، التعامل مع الكائنات. بدون ذلك، ستبدو TypeScript مجرد سكر نحوي إضافي.

\n\n

الأنواع الأساسية التي ستحتاجها في LeetCode

\n
    \n
  • number, string, boolean - الأساسيات، لا غنى عنها
  • \n
  • number[], string[] - المصفوفات، تظهر في 90% من المشاكل
  • \n
  • Record<string, number> - كائن كقاموس (hash map)
  • \n
  • Map<K, V> - بديل للكائن مع الحفاظ على الترتيب
  • \n
  • Set<T> - للقيم الفريدة
  • \n
  • Tuple - المجموعات (tuples)، مفيدة في مشاكل إرجاع زوج من القيم
  • \n
  • null | undefined - معالجة الحالات الحدودية
  • \n
\n\n

هياكل البيانات الأكثر شيوعًا

\n
    \n
  • المصفوفات - الأساس. مصفوفات ثنائية الأبعاد، فرز، بحث ثنائي
  • \n
  • جداول التجزئة (Hash tables) - للبحث السريع (مشكلة Two Sum - كلاسيكية)
  • \n
  • المكدس والطابور (Stack and Queue) - لمشاكل الأقواس، BFS، DFS
  • \n
  • القوائم المرتبطة (Linked lists) - عكس، دمج، كشف الدورة
  • \n
  • الأشجار (Trees) - ثنائية، أشجار بحث ثنائية، اجتيازات
  • \n
  • الرسوم البيانية (Graphs) - عادة في مقابلات مستوى Senior
  • \n
\n\n

لا تحاول تعلم كل شيء دفعة واحدة. ابدأ بالمصفوفات وجداول التجزئة - سيغطي ذلك 70% من مشاكل المستوى Easy و Medium.

\n\n

كيفية إعداد البيئة لـ TypeScript على LeetCode

\n\n

LeetCode تدعم TypeScript بشكل مدمج. عند اختيار اللغة، فقط انقر على "TypeScript" في القائمة المنسدلة. ومع ذلك، إذا كنت تريد كتابة الكود محليًا واختباره، إليك الحد الأدنى من الإعداد:

\n\n
npm init -y\nnpm install typescript @types/node --save-dev\nnpx tsc --init
\n\n

أنشئ ملف solution.ts وقم بتشغيل التجميع باستخدام الأمر npx tsc solution.ts && node solution.js. سيساعدك هذا على التعود على التصنيف الصارم واكتشاف الأخطاء أثناء التنفيذ.

\n\n

تحليل 3 مشاكل باستخدام TypeScript: من Easy إلى Hard

\n\n

الآن ننتقل إلى التطبيق العملي. اخترت ثلاث مشاكل توضح بشكل ممتاز إمكانيات TypeScript وتظهر غالبًا في المقابلات.

\n\n

1. Two Sum (Easy) - كلاسيكية النوع

\n\n

المشكلة: لديك مصفوفة أرقام وهدف. تحتاج إلى إيجاد رقمين مجموعهما يساوي الهدف، وإرجاع فهارسهما.

\n\n
function twoSum(nums: number[], target: number): number[] {\n    const map = new Map<number, number>();\n\n    for (let i = 0; i < nums.length; i++) {\n        const complement = target - nums[i];\n        if (map.has(complement)) {\n            return [map.                

المدونات

توصيات الكتب