لماذا TypeScript هي اللغة المثالية لـ LeetCode؟
\n\nإذا كنت لا تزال تحل المشاكل على LeetCode باستخدام JavaScript - فقد حان الوقت للانتقال إلى TypeScript. لماذا؟ لأن التصنيف الصارم (strict typing) يقطع فئة كاملة من الأخطاء قبل تشغيل الكود. لن تتمكن من تمرير سلسلة نصية عن طريق الخطأ حيث يُتوقع رقم، وسيخبرك المترجم (compiler) بالطرق المتاحة للكائن. الأمر أشبه بقيادة سيارة مع طيار آلي - أسرع وأكثر أمانًا وأكثر متعة.
\n\nLeetCode ليست مجرد منصة لحفظ الخوارزميات. إنها ساحة تدريب تصقل فيها المهارات المطلوبة فعليًا في بيئة الإنتاج. و 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
- جداول التجزئة (Hash tables) - للبحث السريع (مشكلة Two Sum - كلاسيكية) \n
- المكدس والطابور (Stack and Queue) - لمشاكل الأقواس، BFS، DFS \n
- القوائم المرتبطة (Linked lists) - عكس، دمج، كشف الدورة \n
- الأشجار (Trees) - ثنائية، أشجار بحث ثنائية، اجتيازات \n
- الرسوم البيانية (Graphs) - عادة في مقابلات مستوى Senior \n
لا تحاول تعلم كل شيء دفعة واحدة. ابدأ بالمصفوفات وجداول التجزئة - سيغطي ذلك 70% من مشاكل المستوى Easy و Medium.
\n\nكيفية إعداد البيئة لـ TypeScript على LeetCode
\n\nLeetCode تدعم TypeScript بشكل مدمج. عند اختيار اللغة، فقط انقر على "TypeScript" في القائمة المنسدلة. ومع ذلك، إذا كنت تريد كتابة الكود محليًا واختباره، إليك الحد الأدنى من الإعداد:
\n\nnpm init -y\nnpm install typescript @types/node --save-dev\nnpx tsc --init\n\nأنشئ ملف solution.ts وقم بتشغيل التجميع باستخدام الأمر npx tsc solution.ts && node solution.js. سيساعدك هذا على التعود على التصنيف الصارم واكتشاف الأخطاء أثناء التنفيذ.
تحليل 3 مشاكل باستخدام TypeScript: من Easy إلى Hard
\n\nالآن ننتقل إلى التطبيق العملي. اخترت ثلاث مشاكل توضح بشكل ممتاز إمكانيات TypeScript وتظهر غالبًا في المقابلات.
\n\n1. Two Sum (Easy) - كلاسيكية النوع
\n\nالمشكلة: لديك مصفوفة أرقام وهدف. تحتاج إلى إيجاد رقمين مجموعهما يساوي الهدف، وإرجاع فهارسهما.
\n\nfunction 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.