أهم 50 سؤالاً وإجابات في مقابلات المصفوفات (2026)

هل تستعد لمقابلة Array؟ حان الوقت للتركيز على الأسئلة التي قد تُطرح عليك. فهم {{keyword}} يُساعد المرشحين على إبراز مهاراتهم في التفكير التحليلي والمنطق وحل المشكلات بفعالية.

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

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

أسئلة وأجوبة مقابلة Array

أسئلة وأجوبة مقابلة Top Array

1) اشرح ما هي المصفوفة وكيف تختلف عن هياكل البيانات الأخرى.

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

الميزات مجموعة قائمة مرتبطة
تخصيص الذاكرة متجاورة غير متجاورة
وقت الوصول يا (1) O (ن)
الإدراج/الحذف تكلفة فعّالة
الذاكرة العلوية منخفض عالية (مؤشرات)

👉 تحميل ملف PDF مجاني: أسئلة وأجوبة مقابلة Array


٢) ما هي أنواع المصفوفات المختلفة؟ أعطِ أمثلة.

تُصنَّف المصفوفات بناءً على أبعادها واستخداماتها. تشمل الأنواع الرئيسية ما يلي:

  • صفيف أحادي البعد: يخزن العناصر خطيًا، على سبيل المثال، int arr[5] = {1,2,3,4,5}.
  • مصفوفة ثنائية الأبعاد: يمثل البيانات الجدولية، على سبيل المثال، المصفوفات.
  • مصفوفة متعددة الأبعاد: أبعاد أعلى، تُستخدم غالبًا في عمليات المحاكاة أو معالجة الصور.
  • المصفوفات الديناميكية: تغيير الحجم تلقائيًا عند إضافة عناصر، على سبيل المثال، ArrayList in Java, vector in C++.
النوع الهيكلية مثال
1D خطي [1, 2, 3]
2D مصفوفة [[1, 2], [3, 4]]
التفاعل يمكن تغيير حجم std::vector<int>

3) كيف تجد أكبر وأصغر العناصر في المصفوفة؟

غالبًا ما تُحل هذه المشكلة باستخدام عملية مسح خطي. تُحافظ على متغيرين - أحدهما للحد الأدنى والآخر للحد الأقصى - وتُحدَّثهما أثناء التكرار.

الخوارزمية:

  1. تهيئة min و max مع العنصر الأول.
  2. قم بفحص المصفوفة ومقارنة كل عنصر.
  3. تحديث min or max وفقا لذلك.

مثال (C++):

int arr[] = {5, 2, 9, 1, 7};
int min = arr[0], max = arr[0];
for (int i : arr) {
    if (i < min) min = i;
    if (i > max) max = i;
}

تعقيد الوقت: على).


4) ما هي مزايا وعيوب المصفوفات؟

توفر المصفوفات أداءً عاليًا للوصول العشوائي ولكنها تتمتع بحجم ثابت وتغيير الحجم مكلف.

البعد المزايا عيوب
هاملت الفهرسة السريعة (O(1)) إدراج/حذف بطيء (O(n))
ذاكرة تخزين مدمج تخصيص الحجم الثابت
تطبيق بناء جملة بسيط لا توجد حدود للتحقق في بعض اللغات
الحلول المقترحة مناسب لمجموعات البيانات الثابتة غير فعال للتعديلات المتكررة

5) وصف الفرق بين المصفوفات الثابتة والمصفوفات الديناميكية.

A مصفوفة ثابتة له حجم ثابت يتم تحديده في وقت التجميع، بينما مجموعة ديناميكية يمكن أن تنمو أو تتقلص أثناء التشغيل. المصفوفات الثابتة فعّالة في الذاكرة ولكنها جامدة، بينما توفر المصفوفات الديناميكية مرونةً بتكلفة إضافية بسيطة أثناء تغيير الحجم.

الميزات مصفوفة ثابتة مجموعة ديناميكية
المقاس ثابت متغير
ذاكرة كومة كومة
مثال int arr[5]; std::vector<int>
تعديل القياس غير معتمد عائلات

مثال لحالة الاستخدام:
استخدم المصفوفات الثابتة في الأنظمة المضمنة، والمصفوفات الديناميكية للمجموعات ذات الحجم غير المتوقع.


6) كيف يمكنك عكس المصفوفة في مكانها؟

Revتتضمن عملية تبديل المصفوفة في مكانها عملية تبديل.ping تتحرك العناصر من كلا الطرفين نحو المركز.

الخوارزمية:

  1. تهيئة مؤشرين: start = 0 و end = n - 1.
  2. تبديل العناصر arr[start] و arr[end].
  3. زيادة راتب start وتناقص end حتى التقيا.

مثال (Python):

arr = [1, 2, 3, 4, 5]
arr.reverse()  # Built-in method
# or manually
arr = arr[::-1]

تعقيد الوقت: على)، تعقيد الفضاء: O(1).


7) ما هو الفرق بين المصفوفة المتعرجة والمصفوفة متعددة الأبعاد؟

A مصفوفة متعرجة هي عبارة عن مجموعة من المصفوفات حيث يمكن أن يكون للمصفوفات الداخلية أطوال مختلفة، في حين أن مجموعة متعددة الأبعاد يحتوي على أحجام موحدة للصفوف والأعمدة.

الميزات مجموعة متعرجة صفيف متعدد الأبعاد
الهيكلية غير منتظم (المصفوفات المتداخلة) مستطيل (مصفوفة)
ذاكرة غير متجاورة متجاورة
استخدم arr[i][j] arr[i][j]
مثال int[][] jagged = {{1,2}, {3,4,5}}; int[,] matrix = {{1,2}, {3,4}};

تُعد المصفوفات المتعرجة أكثر كفاءة في استخدام الذاكرة عندما تكون البيانات غير متساوية.


8) كيف تجد الرقم المفقود في مصفوفة من 1 إلى n؟

تستفيد هذه المشكلة من الخصائص الرياضية للأعداد الطبيعية.

النهج 1 (صيغة المجموع):
مجموع الأول n الأعداد الطبيعية = n*(n+1)/2.

فرعيةtracمجموع عناصر المصفوفة من هذا المجموع الكلي.

النهج 2 (XOR):
اجمع جميع العناصر التي تحتوي على أرقام من ١ إلى n. القيمة المتبقية هي الرقم المفقود.

على سبيل المثال:
في عمل [1,2,4,5,6] (ن=6):

المجموع المتوقع = 21، المجموع الفعلي = 18 → العدد المفقود = 3.

تعقيد الوقت: على)، تعقيد الفضاء: O(1).


9) ما هي الطرق المختلفة لإزالة العناصر المكررة من المصفوفة؟

هناك عدة طرق تعتمد على اللغة والقيود:

  • استخدام HashSet: قم بتخزين العناصر الفريدة فقط.
  • استخدام الفرز: فرز المصفوفة وإزالة العناصر المكررة المجاورة.
  • استخدام خريطة التردد: Tracعدد k من كل عنصر.

مثال (Java):

Set<Integer> unique = new HashSet<>(Arrays.asList(arr));
النهج الوقت: الفضاء
HashSet O (ن) O (ن)
فرز س (ن سجل ن) يا (1)
تردد O (ن) O (ن)

10) كيف تجد ثاني أكبر عنصر في المصفوفة؟

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

الخوارزمية:

  1. تهيئة first و second as INT_MIN.
  2. اجتياز المصفوفة.
  3. قم بتحديث كليهما عند العثور على قيمة أكبر.

مثال (C++):

int first = INT_MIN, second = INT_MIN;
for (int x : arr) {
    if (x > first) {
        second = first;
        first = x;
    } else if (x > second && x < first) {
        second = x;
    }
}

تعقيد الوقت: على)، تعقيد الفضاء: O(1).


١١) كيف يُمكن تدوير مصفوفة بمقدار "k" موضع؟ اشرح الطرق المختلفة.

يؤدي دوران المصفوفة إلى تحريك العناصر دوريًا. هناك ثلاث طرق رئيسية لتحقيق ذلك:

  1. استخدام مجموعة مؤقتة: انسخ أول k عنصر وأضفها في النهاية بعد تحويل العناصر الأخرى.
  2. باستخدام Revخوارزمية ersal: Reverse ثلاثة أجزاء من المصفوفة - الجزء الأول، الجزء الثاني، ثم المصفوفة بأكملها.
  3. استخدام خوارزمية التلاعب: بناءً على GCD لـ n و k (فعال في O(n)).

مثال (الدوران إلى اليمين بمقدار 2):

Input: [1,2,3,4,5]
Output: [4,5,1,2,3]
الأسلوب الوقت: الفضاء الوصف
مصفوفة مؤقتة O (ن) حسنا) بسيط وبديهي
Revعرسال O (ن) يا (1) في مكانه وفعال
شعوذة O (ن) يا (1) استنادًا إلى دورات GCD

12) ما هي المصفوفة الفرعية وكيف تختلف عن التسلسل الفرعي؟

A مصفوفة فرعية هو قسم متجاور من المصفوفة، في حين أن تسلسل فرعي يحافظ على النظام ولكن قد يتخطى العناصر.

الممتلكات سوباري تسلسل
متجاورة نعم لا
تم الحفاظ على النظام نعم نعم
مثال (من [1،2،3]) [1,2] ، [2,3] [1,3] ، [2,3]

على سبيل المثال:
المصفوفة المعطاة [1,2,3]، إجمالي المصفوفات الفرعية = n*(n+1)/2 = 6.

ومن ناحية أخرى، فإن المتتاليات هي 2ⁿ - 1 = 7 تركيبات غير فارغة.


13) كيف تجد الحد الأقصى لمجموع المصفوفة الفرعية؟

استخدم خوارزمية كادان هي الطريقة الأكثر فعالية للعثور على المصفوفة الفرعية المتجاورة ذات المجموع الأقصى.

الخطوات التالية:

  1. تهيئة max_current = max_global = arr[0].
  2. التكرار من خلال العناصر.
  3. تحديث max_current = max(arr[i], arr[i] + max_current).
  4. Track الحد الأقصى العالمي.

على سبيل المثال:
الإدخال: [-2,1,-3,4,-1,2,1,-5,4] → الإخراج: 6 (مصفوفة فرعية [4,-1,2,1]).

تعقيد:
O(n) زمن، O(1) فضاء.


14) كيف يمكنك دمج مصفوفتين مرتبتين دون استخدام مساحة إضافية؟

لدمج مصفوفتين مرتبتين في المكانالفكرة هي المقارنة من نهاية كلا المصفوفتين.

النهج:

  1. ابدأ من آخر عنصر صالح في كلا المصفوفتين.
  2. قم بمقارنة ونقل الأكبر إلى نهاية المساحة المجمعة.
  3. كرر ذلك حتى يتم دمج كافة العناصر.

مثال (C++):

int i = m-1, j = n-1, k = m+n-1;
while (i >= 0 && j >= 0) {
    if (A[i] > B[j]) A[k--] = A[i--];
    else A[k--] = B[j--];
}

تعقيد الوقت: O(م+ن).


15) ما هي الطرق المختلفة للبحث عن عنصر في مصفوفة؟

الأسلوب النوع تعقيد الوقت استخدام المثال
البحث الخطي غير مصنف O (ن) البحث العام
بحث ثنائي مرتبة O (تسجيل ن) بحث فعال
تجزئة غير منظم متوسط ​​O(1) مجموعات البيانات الكبيرة

مثال (البحث الثنائي – Python):

def binary_search(arr, x):
    l, r = 0, len(arr)-1
    while l <= r:
        mid = (l+r)//2
        if arr[mid] == x: return mid
        elif arr[mid] < x: l = mid+1
        else: r = mid-1
    return -1

16) وضح الفرق بين النسخ السطحي والنسخ العميق في المصفوفات.

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

نوع النسخ استقلالية البيانات مثال
ضحل لا arr_copy = arr
التناول العميق نعم arr_copy = arr[:] (Python)

على سبيل المثال:
إن تعديل نسخة سطحية ينعكس في المصفوفة الأصلية؛ أما النسخة العميقة فلا ينعكس فيها.


17) كيف يمكنك العثور على العناصر المكررة في المصفوفة دون استخدام مساحة إضافية؟

النهج 1 (الفرز): فرز العناصر المجاورة والتحقق منها.

الطريقة 2 (طريقة النفي لقيم 1–n): قام مارك بزيارة المؤشرات عن طريق نفي العنصر الموجود في هذا المؤشر.

النهج 3 (اكتشاف دورة فلويد): تعامل مع المصفوفة كقائمة مرتبطة وابحث عن الدورة (للعناصر المتكررة في النطاق [1..n]).

على سبيل المثال:
مجموعة [3,1,3,4,2] → مكرر = 3.

التوقيت على)، الفضاء: O(1).


18) ما هي المصفوفات المتفرقة وفوائدها؟

A مصفوفة متفرقة يحتوي في الغالب على قيم صفرية أو افتراضية. بدلاً من تخزين جميع العناصر، نخزن فقط الإدخالات غير الصفرية مع مؤشراتها.

المزايا:

  • يحفظ الذاكرة.
  • فعالة لمجموعات البيانات الكبيرة مثل المصفوفات أو ترددات مصطلحات المستندات.
النوع مثال الحلول المقترحة
مصفوفة كثيفة [0,1,0,2,3] بيانات صغيرة
مصفوفة متفرقة {1:1, 3:2, 4:3} بيانات كبيرة ومتفرقة

على سبيل المثال: تستخدم في نماذج التعلم الآلي (مصفوفات TF-IDF).


19) كيف يمكنك العثور على تقاطع مصفوفتين بكفاءة؟

يمكن العثور على التقاطع باستخدام تقنيات التجزئة أو الفرز.

  • استخدام HashSet: أضف عناصر المصفوفة الأولى، ثم تحقق من العضوية للمصفوفة الثانية.
  • استخدام مؤشرين: يعمل مع المصفوفات المصنفة.

مثال (Python):

intersection = list(set(arr1) & set(arr2))

تعقيد:

  • HashSet: O(n)
  • مؤشران: O(n log n) بسبب الفرز.

20) وضح الفرق بين ترتيب الصف الرئيسي وترتيب العمود الرئيسي في المصفوفات.

هذه هي أوامر تخزين الذاكرة المستخدمة للمصفوفات متعددة الأبعاد.

مفهوم وتصميم المنتج الصف الرئيسي (C/C++) العمود الرئيسي (Fortraن، ماتلاب)
طلب التخزين صفًا تلو الآخر عمودًا تلو الآخر
صيغة العنوان Base + ((i * cols) + j) * size Base + ((j * rows) + i) * size
ميزة أسرع لاجتياز الصفوف أسرع لاجتياز العمود

على سبيل المثال:
لمصفوفة ثنائية الأبعاد A[2][3]، المتاجر الكبرى [A[0][0], A[0][1], A[0][2], A[1][0], ...].


21) ما هي تقنية مجموع البادئة وكيف يتم استخدامها في المصفوفات؟

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

المفهوم:

prefix[i] = prefix[i-1] + arr[i]

ثم للحصول على مجموع العناصر من l إلى r، استخدم:

sum(l, r) = prefix[r] - prefix[l-1]

على سبيل المثال:

المصفوفة = [2, 3, 5, 7, 1]

البادئة = [2, 5, 10, 17, 18]

المجموع(2,4) = prefix[4] - prefix[1] = 15

التطبيقات:
يتم استخدامه في استعلامات مجموع المصفوفة الفرعية، وجداول التردد التراكمية، والبرمجة التنافسية.

تعقيد:
المعالجة المسبقة: O(n)، الاستعلام: O(1)


22) كيف تعمل تقنية النافذة المنزلقة على تحسين أداء المصفوفة؟

استخدم نافذة منزلقة يتم استخدام هذه التقنية لحل المشكلات التي تنطوي على أجزاء متجاورة (مصفوفات فرعية) بكفاءة.

فكرة: بدلاً من إعادة حساب المجموع أو الشرط لكل نافذة، قم بتحديث النتيجة عن طريق إضافة العنصر التالي وإزالة العنصر الأول.

مشكلة المثال:
العثور على الحد الأقصى لمجموع المصفوفة الفرعية للحجم k.

الخوارزمية:

  1. احسب مجموع الأول k العناصر.
  2. قم بتحريك النافذة عنصرًا واحدًا في كل مرة.
  3. أضف العنصر الجديد، واحذف العنصر الأول، و track الحد الأقصى.

تعقيد الوقت: O(n) — أسرع بكثير من النهج الساذج O(n×k).

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


23) ما الفرق بين المصفوفة والمؤشر في لغة سي؟

الميزات مجموعة مؤشر
تعريف مجموعة من عناصر البيانات المتشابهة متغير تخزين عنوان الذاكرة
تخصيص الذاكرة متجاورة ديناميكي أو تعسفي
المقاس ثابت يمكن تغيير حجمها
مثال int a[5]; int *p;

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

على سبيل المثال:

int arr[3] = {1,2,3};
int *ptr = arr;  // ptr points to first element

24) كيف يمكنك العثور على مؤشر التوازن في المصفوفة؟

An مؤشر التوازن هو الموضع الذي يكون فيه مجموع العناصر على اليسار مساويًا للمجموع على اليمين.

الخوارزمية:

  1. حساب المجموع الإجمالي للمصفوفة.
  2. قم بالمرور والحفاظ على المجموع الأيسر.
  3. If (total_sum - left_sum - arr[i]) == left_sum، مؤشر العودة.

على سبيل المثال:
مجموعة مصفوفة: [1, 3, 5, 2, 2] → الفهرس = 2 (لأن المجموع الأيسر = المجموع الأيمن = 4)

تعقيد: على)، الفضاء: يا (1)


25) ما هي المصفوفات المتفرقة، وكيف يتم تخزينها بكفاءة؟

A مصفوفة متفرقة يحتوي في الغالب على أصفار. لتوفير الذاكرة، تُخزَّن العناصر غير الصفرية ومؤشراتها فقط.

طرق التخزين:

  1. قائمة الإحداثيات (COO): مخزن (صف، عمود، قيمة).
  2. صف متفرق مضغوط (CSR): ثلاث مصفوفات: values, col_index, row_pointer.
  3. قاموس المفاتيح (DOK): خريطة التجزئة لـ (الصف، العمود) → القيمة.
الأسلوب كفاءة الذاكرة استخدام المثال
COO معتدل تخزين عام
مهمتنا مرتفع الحسابات العددية
DOK موعد تقديم مرن الإدراج الديناميكي

تستخدم على نطاق واسع في آلة التعلم (TF-IDF، مصفوفات تجاور الرسم البياني).


26) كيف يمكنك إعادة ترتيب المصفوفة بحيث تتناوب الأرقام الزوجية والفردية؟

الهدف هو التداخل بين الأعداد الزوجية والفردية مع الحفاظ على ترتيبها النسبي.

الخوارزمية:

  1. فصل المصفوفات الزوجية والفردية.
  2. دمج بالتناوب بدءًا من الزوجي أو الفردي.
  3. إذا نفد أحد الأنواع، قم بإضافة النوع المتبقي.

على سبيل المثال:

Input: [3, 6, 12, 1, 5, 8]
Output: [6, 3, 12, 1, 8, 5]

تعقيد: O (ن)


27) اشرح الفرق بين تدوير المصفوفة وتحويل المصفوفة.

تشغيل تناوب Shiftجي
تعريف العناصر تتحرك بشكل دائري تتحرك العناصر، ويتم ملء الأماكن الشاغرة (على سبيل المثال، 0)
مثال [1,2,3,4] → [3,4,1,2] [1,2,3,4] → [0,1,2,3]
البيانات المفقودة لا نعم
الأستعمال إعادة الترتيبات الدورية تنفيذات قائمة الانتظار

في الخلاصة:
الدوران قابل للعكس؛ أما التحول فلا يكون كذلك عادةً.


28) كيف يمكنك العثور على الحد الأقصى لمصفوفة المنتج الفرعية؟

يشبه خوارزمية كادان، لكنك track كل من الحد الأقصى والحد الأدنى للمنتجات بسبب القيم السالبة.

الخوارزمية:

  1. تهيئة max_ending_here = min_ending_here = arr[0].
  2. كرر وتحديث كليهما بناءً على العنصر الحالي.
  3. تتبع max_so_far.

على سبيل المثال:
الإدخال: [2,3,-2,4] → الإخراج: 6 (مصفوفة فرعية [2,3])

تعقيد: على)، الفضاء: يا (1)


29) كيف يمكنك حساب عدد المصفوفات الفرعية بكفاءة بمجموع معين؟

النهج (مجموع البادئة + خريطة التجزئة):

  1. الحفاظ على المجموع الجاري أثناء التكرار.
  2. بالنسبة لكل مجموع بادئة، تحقق مما إذا كان (current_sum - target) موجود في خريطة التجزئة.
  3. زيادة العدد وفقا لذلك.

على سبيل المثال:

arr = [10,2,-2,-20,10], target = -10
Output = 3 subarrays

تعقيد الوقت: O (ن)

تعقيد الفضاء: O (ن)


30) ما هو التلاعب بالبتات في مسائل المصفوفات، وأين يتم تطبيقه؟

التلاعب بالبت يتضمن إجراء عمليات مثل AND وOR وXOR والتحولات لحل المشكلات بكفاءة.

التطبيقات الشائعة:

  • العثور على عنصر واحد غير متكرر باستخدام XOR.
  • التحقق من وجود مجموعة فرعية باستخدام bitmasking.
  • تمثيل المجموعات كمتجهات بت.

على سبيل المثال:

ابحث عن العنصر الذي يظهر مرة واحدة عندما يظهر الآخرون مرتين:

int res = 0;
for (int num : arr) res ^= num;

المزايا:

  • مساحة ثابتة
  • الحساب المنطقي السريع

31) كيف يمكنك عبور مصفوفة بشكل حلزوني؟

A عبور حلزوني يقوم بزيارة جميع عناصر المصفوفة طبقة بعد طبقة في اتجاه عقارب الساعة.

الخوارزمية:

  1. حدد أربعة حدود: top, bottom, leftو right.
  2. انتقل من اليسار → اليمين، ومن الأعلى → الأسفل، ومن اليمين → اليسار، ومن الأسفل → الأعلى.
  3. قم بتقليص الحدود بعد كل تمريرة حتى يتم تغطية جميع العناصر.

على سبيل المثال:

Input:
1 2 3
4 5 6
7 8 9
Output: [1,2,3,6,9,8,7,4,5]

تعقيد:
الزمن: O(n×m) | الفضاء: O(1)


٣٢) ما هي الطرق المختلفة لفرز المصفوفات؟ اشرح ذلك بأمثلة.

الفرز يُعيد ترتيب العناصر بترتيب مُحدد. يعتمد اختيار الخوارزمية على حجم البيانات والتوزيع وقيود الذاكرة.

خوارزمية أفضل حالة متوسط ​​الحالة مستقر الفضاء
Bubblه فرز O (ن) س (ن²) نعم يا (1)
دمج الفرز س (ن سجل ن) س (ن سجل ن) نعم O (ن)
فرز سريع س (ن سجل ن) س (ن²) لا O (تسجيل ن)
نوع كومة س (ن سجل ن) س (ن سجل ن) لا يا (1)

مثال (Python فرز سريع):

def quicksort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr)//2]
    return quicksort([x for x in arr if x < pivot]) + [x for x in arr if x == pivot] + quicksort([x for x in arr if x > pivot])

33) اشرح تقنية المؤشرين في المصفوفات.

استخدم تقنية النقطتين يستخدم مؤشرين لاجتياز بنية البيانات من نهايات أو سرعات مختلفة، مما يؤدي إلى تحسين الوقت والمكان.

الاستخدامات الشائعة:

  • اكتشاف الأزواج ذات مجموع معين في المصفوفات المفرزة.
  • إزالة التكرارات في مكانها.
  • Revمصفوفات مترابطة.
  • دمج الفواصل الزمنية.

مثال (اقرن مع Target مجموع):

arr = [1,2,3,4,6], target = 6
left, right = 0, len(arr)-1
while left < right:
    s = arr[left] + arr[right]
    if s == target: print(arr[left], arr[right])
    elif s < target: left += 1
    else: right -= 1

تعقيد: O (ن)


34) كيف يمكنك العثور على العنصر الأكثر أهمية في المصفوفة؟

A عنصر الأغلبية يظهر أكثر من ⌊n/2⌋ مرة.

خوارزمية التصويت بوير مور يحل هذا في زمن خطي ومساحة ثابتة.

خطوات الخوارزمية:

  1. تهيئة candidate و count = 0.
  2. لكل عنصر:
    • إذا كان العدد = 0، اضبط candidate = element.
    • زيادة/نقصان العدد على أساس المساواة.
  3. التحقق من المرشح.

على سبيل المثال: [3,2,3] → الإخراج: 3

تعقيد: O (ن)


35) ما هو الفرق بين البحث الثنائي والبحث الأسي؟

الميزات بحث ثنائي البحث الأسّي
متطلبات مصفوفة مرتبة مصفوفة مرتبة
الفكرة الرئيسية تقسيم المصفوفة إلى نصفين ابحث عن النطاق بشكل أسي قبل البحث الثنائي
تعقيد O (تسجيل ن) O (تسجيل ن)
الحلول المقترحة الحجم المعروف المصفوفات غير المعروفة أو اللانهائية

على سبيل المثال:
بالنسبة لمجموعات البيانات الكبيرة أو المصفوفات غير المحدودة (مثل واجهات برمجة التطبيقات المقسمة إلى صفحات)، يجد البحث الأسّي النطاق بكفاءة.


36) كيف يمكنك العثور على أصغر أو أكبر عنصر في المصفوفة؟

اقتراب:

  1. فرز: الفرز والوصول k-1المؤشر (O(n log n)).
  2. الحد الأدنى/الحد الأقصى للكومة: فعالة للاستعلامات المتكررة (O(n log k)).
  3. QuickSelect (خوارزمية هوار): متوسط ​​O(n).

مثال (Python باستخدام heapq):

import heapq
arr = [3,2,1,5,6,4]
k = 2
print(heapq.nlargest(k, arr)[-1])  # 5

حالة الاستخدام: لوحات المتصدرين، ومقاييس الأداء الأعلى، وتحليل النسب المئوية.


37) كيف تجد الرقم المفقود والمتكرر في مصفوفة من 1 إلى n؟

بالنظر إلى مجموعة تحتوي على أرقام من 1 إلى n، مع وجود رقم مفقود ورقم متكرر:

النهج الأول (الرياضي):
استخدم الفرق بين المجموع الفعلي والمتوقع ومجموع المربعات.

النهج 2 (طريقة XOR):

  1. XOR لجميع عناصر المصفوفة و 1…n.
  2. النتيجة تعطي XOR للأرقام المفقودة والمكررة.
  3. قم بالتقسيم باستخدام البت الموجود في أقصى اليمين.

تعقيد: على)، الفضاء: يا (1)

على سبيل المثال:

Input: [4,3,6,2,1,1]
Output: Missing = 5, Repeating = 1

38) ما هي أعداد الانعكاس في المصفوفة وكيفية حسابها؟

An انقلاب هو زوج (i, j) بحيث i < j و arr[i] > arr[j].

النهج:

  • ساذج: تحقق من جميع الأزواج → O(n²).
  • مُحسَّن (دمج الفرز): عدد الانعكاسات أثناء الدمج → O(n log n).

على سبيل المثال:

Input: [8, 4, 2, 1]
Inversions = 6 → (8,4), (8,2), (8,1), (4,2), (4,1), (2,1)

مستعمل في قياس اضطراب المصفوفة و أنظمة التصنيف.


39) كيف يمكنك إيجاد الوسيط لمصفوفتين مرتبتين؟

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

الخوارزمية:

  1. استخدم البحث الثنائي على مجموعة أصغر.
  2. مقارنة حدود القسم.
  3. إرجاع المتوسط ​​بناءً على قيم القسم.

تعقيد: O(log(min(n, m)))

على سبيل المثال:

A = [1,3], B = [2]
Median = 2.0

40) ما هي مزايا استخدام المصفوفات بدلاً من القوائم المرتبطة؟

عامل مجموعة قائمة مرتبطة
ذاكرة متجاورة غير متجاورة
وقت الوصول يا (1) O (ن)
الإدراج/الحذف غالية فعّالة
موقع ذاكرة التخزين المؤقت أسعار فقير
فوق بدون سلوفان تخزين إضافي للمؤشر

الخلاصة:
تُعد المصفوفات مثالية لمجموعات البيانات ذات الحجم الثابت التي تتطلب وصولاً عشوائيًا، في حين تُعد القوائم المرتبطة أفضل للإدراج والحذف الديناميكي.


41) كيف تجد الحد الأقصى لمجموع مصفوفة دائرية فرعية؟

في باقة مصفوفة دائرية، تلتف العناصر حول بعضها في النهاية.

النهج:

  1. إيجاد مجموع المصفوفة الفرعية القصوى الطبيعية باستخدام خوارزمية كادان.
  2. العثور على الحد الأدنى لمجموع المصفوفة الفرعية.
  3. النتيجة = max(normal_max, total_sum - min_subarray).

حالة الحافة: إذا كانت جميع العناصر سلبية، قم بإرجاع العنصر الأقصى.

على سبيل المثال:

Input: [5, -2, 3, 4]
Normal Max = 10, Circular Max = 12 → Output = 12

تعقيد: O (ن)


42) كيف تبحث عن عنصر في مصفوفة مرتبة ومدورة؟

إستخدم البحث الثنائي المعدل للعثور على المحور وضبط المقارنات.

الخوارزمية:

  1. أوجد المتوسط ​​= (المنخفض + المرتفع) / 2.
  2. تحقق فيما لو arr[mid] == target.
  3. إذا تم فرز النصف الأيسر → ابحث عن اليسار؛ وإلا، فابحث عن اليمين.

على سبيل المثال:

Input: [4,5,6,7,0,1,2], target = 0
Output: Index = 4

تعقيد الوقت: O (تسجيل ن)


43) اشرح نهج البرمجة الديناميكية لـ "المتتالية الفرعية المتزايدة للمجموع الأقصى".

الهدف هو العثور على الحد الأقصى لمجموع متتالية فرعية متزايدة.

الخوارزمية:

  1. تهيئة dp[i] = arr[i].
  2. لكل i، تحقق من العناصر السابقة j < i:
    • If arr[j] < arr[i]، ثم dp[i] = max(dp[i], arr[i] + dp[j]).
  3. إرجاع الحد الأقصى للقيمة في dp.

على سبيل المثال:

Input: [1, 101, 2, 3, 100, 4, 5]
Output: 106 (1 + 2 + 3 + 100)

التوقيت O(n²) | الفضاء: O (ن)


44) ما هو "الفخ"ping مشكلة "مياه الأمطار" وكيف يمكن حلها؟

تتساءل هذه المشكلة الكلاسيكية حول كمية المياه التي يمكن حبسها بين القضبان بعد هطول الأمطار.

النهج (نقطتان):

  1. تهيئة left, right, left_max, right_max.
  2. تحريك المؤشرات إلى الداخل، وتحديث المياه المحاصرة = min(left_max, right_max) - height[i].

على سبيل المثال:

Input: [0,1,0,2,1,0,1,3,2,1,2,1]
Output: 6
النهج الوقت: الفضاء
القوة الغاشمة س (ن²) يا (1)
البرمجة الديناميكية O (ن) O (ن)
مؤشران O (ن) يا (1)

45) كيف يمكنك العثور على أطول مصفوفة فرعية بمجموع يساوي صفرًا؟

الخوارزمية (خريطة التجزئة):

  1. قم بإعداد خريطة تجزئة لتخزين مجموعات البادئة.
  2. إذا ظهر نفس مجموع البادئة مرة أخرى، فسيكون مجموع المصفوفة الفرعية بين المؤشرات صفرًا.

على سبيل المثال:

Input: [15, -2, 2, -8, 1, 7, 10, 23]
Output: Length = 5 (Subarray [-2, 2, -8, 1, 7])

تعقيد: O (ن)


46) ما هو الفرق بين التسوية السطحية والعميقة للمصفوفات متعددة الأبعاد؟

النوع تعريف مثال
تسطيح ضحل يسطح مستوى واحد فقط [[1,2],[3,[4]]] → [1,2,3,[4]]
تسطيح عميق تسطيح جميع المصفوفات المتداخلة بالكامل [[1,2],[3,[4]]] → [1,2,3,4]

مثال (Python):

import itertools
shallow = list(itertools.chain.from_iterable(arr))

حالة الاستخدام: مفيد في تنظيف البيانات وتطبيع البيانات الهرمية.


47) كيف تجد عنصر التوازن في مصفوفة (مصفوفة ثنائية الأبعاد)؟

An عنصر التوازن في المصفوفة هو العنصر الذي مجموع الصفوف والأعمدة متوازنة.

الخوارزمية:

  1. حساب مجموع الصفوف والأعمدة مسبقًا.
  2. بالنسبة لكل عنصر، تحقق مما إذا كان row_sum[i] - arr[i][j] == col_sum[j] - arr[i][j].

على سبيل المثال:

مصفوفة:

Matrix:
2 7 5
3 1 1
4 6 8
Output: Element 1 at (1,1)

تعقيد: س (ن²)


48) كيف يمكنك تقسيم المصفوفة إلى مجموعتين فرعيتين بمجموع متساوي؟

هذا هو مشكلة مجموع جزئي، تم حلها باستخدام البرمجة الديناميكية.

النهج:

  1. احسب المجموع الإجمالي.
  2. إذا كانت القيمة فردية → قم بإرجاع False.
  3. إنشاء جدول DP للتحقق مما إذا كانت المجموعة الفرعية تحتوي على sum/2 موجودا.

على سبيل المثال:

Input: [1,5,11,5]
Output: True (Subsets: [1,5,5] and [11])

التوقيت O(n × المجموع/2) | الفضاء: O(مجموع/2)


49) كيف تقوم بتدوير المصفوفة بمقدار 90 درجة في اتجاه عقارب الساعة؟

الخوارزمية:

  1. نقل المصفوفة.
  2. Reverse كل صف.

على سبيل المثال:

Input:
1 2 3
4 5 6
7 8 9
Output:
7 4 1
8 5 2
9 6 3

تعقيد: O(n²)، في مكانه.

مستعمل في معالجة الصورة و تحويلات تصور البيانات.


50) ما هي التطبيقات الأكثر شيوعا في العالم الحقيقي للمصفوفات؟

تشكل المصفوفات الأساس للعديد من الأنظمة الحسابية والواقعية.

التطبيقات:

  • فهرسة قاعدة البيانات: تخزين وفرز السجلات.
  • التعلم الالي: متجهات الميزات والمصفوفات والموترات.
  • معالجة الصورة: بيانات البكسل ثنائية الأبعاد وثلاثية الأبعاد.
  • Operaأنظمة تينغ: جدولة الذاكرة والعمليات.
  • الشبكات: تخزين الحزم وتوجيهها.
  • الألعاب: حالة اللاعب tracالملك والشبكات.
نطاق دور المصفوفة
AI / ML تمثيل الموتر والمصفوفة
DBMS الفهرسة وتحسين البحث
نظم جزءا لا يتجزأ من بيانات الاستشعار في الوقت الحقيقي
الحوسبة السحابية مصفوفات توزيع الأحمال

توفر المصفوفات العمود الفقري لتنظيم البيانات بكفاءة، والحوسبة، وقابلية التوسع.


🔍 أفضل أسئلة المقابلات مع سيناريوهات واقعية واستجابات استراتيجية

1) ما هي المصفوفة وكيف تختلف عن هياكل البيانات الأخرى؟

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

مثال للإجابة:
المصفوفة هي مجموعة من العناصر المخزنة في مواقع ذاكرة متجاورة، حيث يمكن الوصول إلى كل عنصر باستخدام فهرس. بخلاف القوائم المرتبطة، توفر المصفوفات وصولاً ثابتًا (O(1)) إلى العناصر، ولكنها تتطلب حجمًا ثابتًا يُحدد عند إنشائها. هذا يجعلها فعالة لعمليات القراءة، ولكنها أقل مرونة لعمليات الإدخال والحذف.


2) كيف يمكنك العثور على أكبر وأصغر العناصر في المصفوفة بكفاءة؟

المتوقع من المرشح: يريد القائم بالمقابلة التحقق من تفكيرك الخوارزمي وقدرتك على تحسين الأداء.

مثال للإجابة:
لإيجاد أكبر وأصغر عنصرين في مصفوفة بكفاءة، سأقوم بالمرور على المصفوفة مرة واحدة، مع الاحتفاظ بـping track من الحد الأقصى والحد الأدنى الحاليين. يتميز هذا النهج بتعقيد زمني قدره O(n) وتعقيد مكاني قدره O(1)، وهو الأمثل لهذه المسألة.


3) وصف كيفية إزالة العناصر المكررة من مصفوفة غير مرتبة.

المتوقع من المرشح: يريد القائم بالمقابلة تقييم معرفتك بمعالجة المصفوفات وهياكل البيانات التي يمكن أن تساعد في تحقيق هذه المهمة.

مثال للإجابة:
سأستخدم مجموعة تجزئة لتخزين العناصر الفريدة أثناء التكرار في المصفوفة. إذا كان العنصر موجودًا بالفعل في المجموعة، فسأتجاوزه؛ وإلا، فسأضيفه. تضمن هذه الطريقة إزالة العناصر المكررة بكفاءة بتعقيد زمني قدره O(n) وتعقيد مكاني قدره O(n).


4) هل يمكنك شرح كيفية عمل فرز المصفوفات وتسمية بعض الخوارزميات الشائعة؟

المتوقع من المرشح: يتوقع المحاور أن يكون لديه إلمام بخوارزميات الفرز المختلفة وحالات استخدامها.

مثال للإجابة:
"يمكن تحقيق فرز المصفوفات باستخدام خوارزميات مختلفة مثل الفرز السريع والفرز بالدمج و Bubblالفرز السريع فعال في الحالات المتوسطة ذات التعقيد O(n log n)، بينما يُفضل الفرز بالدمج لمجموعات البيانات الكبيرة نظرًا لطبيعته المستقرة. Bubblعلى الرغم من بساطة الترتيب، إلا أنه نادرًا ما يتم استخدامه بسبب أدائه O(n²).


5) أخبرني عن وقت قمت فيه بتحسين برنامج يستخدم المصفوفات بكثافة.

المتوقع من المرشح: يريد القائم بالمقابلة أن يفهم نهجك في حل المشكلات وقدرتك على تحسين الأداء.

مثال للإجابة:
في وظيفتي السابقة، قمتُ بتحسين نص برمجي لمعالجة البيانات يعتمد على عدة حلقات متداخلة عبر المصفوفات. من خلال تطبيق تقسيم المصفوفات واستخدام العمليات المتجهية المدمجة، قللتُ وقت التنفيذ بنسبة تقارب 60%، مما أدى إلى تحسين استجابة النظام بشكل ملحوظ.


6) كيف تتعامل مع خطأ مؤشر المصفوفة خارج النطاق؟

المتوقع من المرشح: يقوم المحاور بالتحقق من فهمك لكيفية التعامل مع الأخطاء وممارسات الترميز الآمنة.

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


7) كيف يمكنك عكس المصفوفة دون استخدام ذاكرة إضافية؟

المتوقع من المرشح: يريد القائم بالمقابلة تقييم كفاءتك الخوارزمية وفهمك للعمليات الجارية.

مثال للإجابة:
سأستخدم مؤشرين: أحدهما يبدأ من بداية المصفوفة والآخر من نهايتها. عن طريق التبديلping بوضع العناصر في هذه المواضع وتحريك كلا المؤشرين نحو المركز، يمكن عكس ترتيب المصفوفة في مكانها بتعقيد زمني قدره O(n) وتعقيد مكاني قدره O(1).


٨) صف موقفًا اضطررت فيه لإدارة مجموعة بيانات كبيرة. كيف ضمنت الأداء والدقة؟

المتوقع من المرشح: يريد القائم بإجراء المقابلة أن يقيس قدرتك على التعامل مع إدارة البيانات في العالم الحقيقي وتحسين الأداء.

مثال للإجابة:
في وظيفتي السابقة، عملت على مصفوفات رقمية كبيرة لتحليل البيانات المالية. وللحفاظ على الأداء، استخدمتُ تقنيات فعّالة لإدارة الذاكرة ومعالجة الدفعات. كما استفدتُ من مصفوفات NumPy لإجراء عمليات متجهية، مما حسّن الدقة وسرعة التنفيذ.


9) ما هي الخطوات التي ستتخذها للبحث عن قيمة معينة في مصفوفة مرتبة؟

المتوقع من المرشح: يتوقع القائم بإجراء المقابلة منك أن تثبت معرفتك بخوارزميات البحث.

مثال للإجابة:
بالنسبة لمصفوفة مرتبة، سأستخدم خوارزمية البحث الثنائي، التي تقسم فترة البحث إلى نصفين بشكل متكرر. يُقلل هذا النهج من تعقيد الوقت إلى O(log n)، مما يجعله أكثر كفاءة بكثير من البحث الخطي لمجموعات البيانات الكبيرة.


10) كيف تلعب المصفوفات دورًا في حل المشكلات الواقعية في تطوير البرمجيات؟

المتوقع من المرشح: يريد القائم بالمقابلة أن يفهم كيفية ربط المعرفة التقنية بالتطبيقات العملية.

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

تلخيص هذه التدوينة بـ: