คำถามและคำตอบสัมภาษณ์อาร์เรย์ 50 อันดับแรก (2026)

เตรียมตัวสัมภาษณ์งานกับ Array หรือยัง? ถึงเวลาแล้วที่จะโฟกัสกับคำถามที่คุณอาจเจอ ความเข้าใจใน {{keyword}} ช่วยให้ผู้สมัครสามารถแสดงจุดแข็งด้านการคิดวิเคราะห์ ตรรกะ และการแก้ปัญหาได้อย่างมีประสิทธิภาพ

อาร์เรย์เป็นรากฐานของประสบการณ์ทางเทคนิคและประสบการณ์ทางวิชาชีพสำหรับโปรแกรมเมอร์ ตั้งแต่ผู้เริ่มต้นจนถึงมืออาชีพอาวุโส การเชี่ยวชาญอาร์เรย์แสดงให้เห็นถึงความเชี่ยวชาญทางเทคนิคที่แข็งแกร่งและประสบการณ์ระดับรากหญ้าในการจัดการข้อมูล นายจ้างให้คุณค่ากับทักษะดังกล่าวในระหว่างการถามตอบping ผู้สมัครสอบผ่านรอบคำถามทั่วไป คำถามขั้นสูง หรือการสอบสัมภาษณ์ ด้วยการวิเคราะห์อย่างมั่นใจและทักษะเชิงปฏิบัติ

คอลเลกชันนี้ซึ่งรวบรวมจากข้อมูลเชิงลึกของผู้นำทางเทคนิค ผู้จัดการ และผู้เชี่ยวชาญกว่า 85 ราย ครอบคลุมมุมมองที่หลากหลายในอุตสาหกรรมต่างๆ เพื่อให้แน่ใจว่าหัวข้อต่างๆ ในแต่ละหัวข้อสะท้อนถึงความคาดหวังในการจ้างงานที่แท้จริงและมาตรฐานการประเมินการเขียนโค้ดในโลกแห่งความเป็นจริง

คำถามและคำตอบสัมภาษณ์แบบอาร์เรย์

คำถามและคำตอบสัมภาษณ์ Top Array

1) อธิบายว่าอาร์เรย์คืออะไรและแตกต่างจากโครงสร้างข้อมูลอื่นอย่างไร

อาร์เรย์คือบล็อกหน่วยความจำแบบต่อเนื่องที่จัดเก็บองค์ประกอบหลายองค์ประกอบที่มีชนิดข้อมูลเดียวกัน อาร์เรย์อนุญาตให้เข้าถึงองค์ประกอบใดๆ ได้ตลอดเวลาโดยใช้ดัชนี ทำให้เป็นหนึ่งในโครงสร้างที่มีประสิทธิภาพสูงสุดสำหรับการเข้าถึงแบบสุ่ม อาร์เรย์ต่างจากรายการแบบลิงก์ ตรงที่อาร์เรย์มีขนาดคงที่และไม่มีค่าใช้จ่ายในการจัดเก็บตัวชี้ อาร์เรย์จะได้รับความนิยมเมื่อทราบจำนวนองค์ประกอบล่วงหน้า ในขณะที่โครงสร้างแบบไดนามิก เช่น รายการหรือเวกเตอร์ จะถูกใช้เมื่อคาดว่าจะมีการปรับขนาดบ่อยครั้ง

คุณสมบัติ (Feature) แถว รายการที่เชื่อมโยง
การจัดสรรหน่วยความจำ ติดกัน ไม่ต่อเนื่องกัน
เวลาเข้าถึง O (1) O (n)
การแทรก/การลบ แพง ที่มีประสิทธิภาพ
โอเวอร์เฮดหน่วยความจำ ต่ำ สูง (ตัวชี้)

👉 ดาวน์โหลด PDF ฟรี: คำถามและคำตอบสัมภาษณ์แบบอาร์เรย์


2) อาร์เรย์มีกี่ประเภท? จงยกตัวอย่างประกอบ

อาร์เรย์ถูกจัดประเภทตามขนาดและการใช้งาน ประเภทหลักๆ ประกอบด้วย:

  • อาร์เรย์หนึ่งมิติ: จัดเก็บองค์ประกอบแบบเชิงเส้น เช่น 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) คุณจะค้นหาองค์ประกอบที่ใหญ่ที่สุดและเล็กที่สุดในอาร์เรย์ได้อย่างไร

ปัญหานี้มักได้รับการแก้ไขโดยใช้การท่องแบบเชิงเส้น (Linear Traversal) คุณรักษาตัวแปรสองตัว — ตัวหนึ่งสำหรับค่าต่ำสุด และอีกตัวหนึ่งสำหรับค่าสูงสุด — และอัปเดตตัวแปรเหล่านี้ในระหว่างการวนซ้ำ

ขั้นตอนวิธีการ:

  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 อาร์เรย์คงที่ มีขนาดคงที่ที่กำหนดไว้ในเวลาคอมไพล์ ในขณะที่ ไดนามิกอาร์เรย์ สามารถขยายหรือหดตัวได้ในระหว่างรันไทม์ อาร์เรย์แบบคงที่มีประสิทธิภาพในหน่วยความจำแต่มีความยืดหยุ่น ในขณะที่อาร์เรย์แบบไดนามิกให้ความยืดหยุ่นโดยมีค่าใช้จ่ายเพิ่มเติมเล็กน้อยในระหว่างการปรับขนาด

คุณสมบัติ (Feature) อาร์เรย์แบบคงที่ อาร์เรย์แบบไดนามิก
ขนาด คงที่ ตัวแปร
หน่วยความจำ กอง กอง
ตัวอย่าง 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]

ความซับซ้อนของเวลา: บน), ความซับซ้อนของอวกาศ: โอ(1).


7) ความแตกต่างระหว่าง Jagged Array กับ Multidimensional Array คืออะไร?

A อาร์เรย์หยัก เป็นอาร์เรย์ของอาร์เรย์ โดยที่อาร์เรย์ภายในสามารถมีความยาวต่างกันได้ ในขณะที่ อาร์เรย์หลายมิติ มีขนาดแถวและคอลัมน์ที่สม่ำเสมอ

คุณสมบัติ (Feature) อาร์เรย์แบบหยัก อาร์เรย์หลายมิติ
โครงสร้าง ไม่สม่ำเสมอ (อาร์เรย์ซ้อนกัน) สี่เหลี่ยมผืนผ้า (เมทริกซ์)
หน่วยความจำ ไม่ต่อเนื่องกัน ติดกัน
ทางเข้า 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):
XOR ทุกองค์ประกอบที่มีตัวเลขตั้งแต่ 1 ถึง n ค่าที่เหลือคือตัวเลขที่หายไป

ตัวอย่าง:
ใช้เพื่อการ [1,2,4,5,6] (n=6):

ผลรวมที่คาดหวัง = 21, ผลรวมจริง = 18 → หายไป = 3

ความซับซ้อนของเวลา: บน), ความซับซ้อนของอวกาศ: โอ(1).


9) มีวิธีใดบ้างในการลบข้อมูลที่ซ้ำกันออกจากอาร์เรย์?

มีหลายวิธีขึ้นอยู่กับภาษาและข้อจำกัด:

  • การใช้ HashSet: เก็บเฉพาะองค์ประกอบที่ไม่ซ้ำกันเท่านั้น
  • การใช้การเรียงลำดับ: เรียงลำดับอาร์เรย์และลบรายการที่ซ้ำกันที่อยู่ติดกัน
  • การใช้แผนที่ความถี่: Track จำนวนของแต่ละองค์ประกอบ

ตัวอย่าง (Java):

Set<Integer> unique = new HashSet<>(Arrays.asList(arr));
เข้าใกล้ เวลา ช่องว่าง
แฮชเซ็ต O (n) O (n)
การเรียงลำดับ O (n บันทึก n) O (1)
เวลา O (n) O (n)

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;
    }
}

ความซับซ้อนของเวลา: บน), ความซับซ้อนของอวกาศ: โอ(1).


11) คุณจะหมุนอาร์เรย์ได้ 'k' ตำแหน่งได้อย่างไร? อธิบายวิธีการต่างๆ

การหมุนอาร์เรย์จะเลื่อนองค์ประกอบแบบวนรอบ มี สามวิธีหลัก เพื่อให้บรรลุ:

  1. การใช้ Temporary Array: คัดลอกองค์ประกอบ k แรกและผนวกเข้าในตอนท้ายหลังจากเลื่อนองค์ประกอบอื่นๆ
  2. การใช้ Revอัลกอริทึม ersal: Reverse อาร์เรย์ประกอบด้วยสามส่วน ได้แก่ ส่วนแรก ส่วนที่สอง และอาร์เรย์ทั้งหมด
  3. การใช้อัลกอริทึมการเล่นกล: อ้างอิงจาก GCD ของ n และ k (มีประสิทธิภาพใน O(n))

ตัวอย่าง (การหมุนขวา 2):

Input: [1,2,3,4,5]
Output: [4,5,1,2,3]
วิธี เวลา ช่องว่าง Descriptไอออน
อาร์เรย์ชั่วคราว O (n) ตกลง) เรียบง่ายและใช้งานง่าย
Revเออร์ซัล O (n) O (1) ในสถานที่และมีประสิทธิภาพ
การเล่นกล O (n) O (1) อิงตามรอบ GCD

12) Subarray คืออะไร และแตกต่างจาก Subsequence อย่างไร

A อาร์เรย์ย่อย เป็นส่วนที่ต่อเนื่องกันของอาร์เรย์ ในขณะที่ ลำดับย่อย รักษาความเป็นระเบียบแต่สามารถข้ามองค์ประกอบได้

อสังหาริมทรัพย์ ซับอาร์เรย์ ลำดับย่อย
ติดกัน มี (ใบกำกับภาษีเต็มรูปแบบ) ไม่
คำสั่งเก็บรักษาไว้ มี (ใบกำกับภาษีเต็มรูปแบบ) มี (ใบกำกับภาษีเต็มรูปแบบ)
ตัวอย่าง (จาก [1,2,3]) [1,2] [1,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 คือค่าสูงสุดทั่วโลก

ตัวอย่าง:
Input: [-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--];
}

ความซับซ้อนของเวลา: โอ(ม+น).


15) มีวิธีต่างๆ อะไรบ้างในการค้นหาองค์ประกอบในอาร์เรย์?

วิธี ประเภท ความซับซ้อนของเวลา ตัวอย่างการใช้งาน
การค้นหาเชิงเส้น ไม่เรียงลำดับ O (n) การค้นหาทั่วไป
การค้นหาแบบไบนารี เรียง O (บันทึก n) การค้นหาที่มีประสิทธิภาพ
hashing ไม่เรียงลำดับ ค่าเฉลี่ย 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.

เวลา: บน), พื้นที่: โอ(1).


18) Sparse Array คืออะไร และมีประโยชน์อย่างไร?

A อาร์เรย์กระจัดกระจาย ส่วนใหญ่มีค่าเป็นศูนย์หรือค่าเริ่มต้น แทนที่จะเก็บองค์ประกอบทั้งหมด เราจะเก็บเฉพาะรายการที่ไม่ใช่ศูนย์พร้อมดัชนีขององค์ประกอบเหล่านั้น

ข้อดี:

  • ช่วยประหยัดหน่วยความจำ
  • มีประสิทธิภาพสำหรับชุดข้อมูลขนาดใหญ่ เช่น เมทริกซ์หรือความถี่ของเงื่อนไขเอกสาร
ประเภท ตัวอย่าง ใช้กรณี
อาร์เรย์หนาแน่น [0,1,0,2,3] ข้อมูลขนาดเล็ก
อาร์เรย์แบบเบาบาง {1:1, 3:2, 4:3} ข้อมูลเบาบางขนาดใหญ่

ตัวอย่าง: ใช้ในโมเดลการเรียนรู้ของเครื่อง (เมทริกซ์ TF-IDF)


19) คุณสามารถค้นหาจุดตัดของอาร์เรย์ทั้งสองอย่างมีประสิทธิภาพได้อย่างไร

สามารถค้นหาจุดตัดได้โดยใช้เทคนิคการแฮชหรือการเรียงลำดับ

  • การใช้ HashSet: เพิ่มองค์ประกอบของอาร์เรย์แรก จากนั้นตรวจสอบสมาชิกภาพของอาร์เรย์ที่สอง
  • การใช้ตัวชี้สองตัว: ใช้งานได้กับอาร์เรย์ที่มีการเรียงลำดับ

ตัวอย่าง (Python):

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

ซับซ้อน:

  • ชุดแฮช: O(n)
  • ตัวชี้สองตัว: O(n log n) เนื่องจากการเรียงลำดับ

20) อธิบายความแตกต่างระหว่างลำดับแถวหลักและคอลัมน์หลักในอาร์เรย์

เหล่านี้เป็นคำสั่งจัดเก็บหน่วยความจำที่ใช้สำหรับอาร์เรย์หลายมิติ

แนวคิด โรว์เมเจอร์ (ซี/C++) คอลัมน์หลัก (Fortraน., MATLAB)
คำสั่งจัดเก็บ แถวต่อแถว คอลัมน์ต่อคอลัมน์
สูตรที่อยู่ Base + ((i * cols) + j) * size Base + ((j * rows) + i) * size
ความได้เปรียบ เร็วขึ้นสำหรับการข้ามแถว เร็วขึ้นสำหรับการเคลื่อนผ่านคอลัมน์

ตัวอย่าง:
สำหรับอาร์เรย์ 2 มิติ A[2][3], ร้านค้าแถวใหญ่ [A[0][0], A[0][1], A[0][2], A[1][0], ...].


21) เทคนิค Prefix Sum คืออะไร และใช้ในอาร์เรย์อย่างไร

การขอ ผลรวมคำนำหน้า เทคนิคนี้เกี่ยวข้องกับการคำนวณผลรวมสะสมล่วงหน้าของอาร์เรย์เพื่อตอบคำถามช่วงอย่างมีประสิทธิภาพ

แนวคิด:

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) ความแตกต่างระหว่างอาร์เรย์และตัวชี้ในภาษา C คืออะไร?

คุณสมบัติ (Feature) แถว ตัวชี้
คำนิยาม การรวบรวมองค์ประกอบข้อมูลที่คล้ายกัน ตัวแปรที่เก็บที่อยู่หน่วยความจำ
การจัดสรรหน่วยความจำ ติดกัน แบบไดนามิกหรือตามอำเภอใจ
ขนาด คงที่ สามารถปรับขนาดได้
ตัวอย่าง 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)

ซับซ้อน: บน), พื้นที่: O (1)


25) เมทริกซ์แบบเบาบางคืออะไร และจัดเก็บอย่างมีประสิทธิภาพได้อย่างไร

A เมทริกซ์กระจัดกระจาย ส่วนใหญ่ประกอบด้วยค่าศูนย์ เพื่อประหยัดหน่วยความจำ จึงเก็บเฉพาะองค์ประกอบที่ไม่ใช่ศูนย์และดัชนีเท่านั้น

วิธีการจัดเก็บ:

  1. รายการพิกัด (COO): เก็บ (แถว, คอลัมน์, ค่า)
  2. แถวกระจัดกระจายแบบบีบอัด (CSR): สามอาร์เรย์: values, col_index, row_pointer.
  3. พจนานุกรมคีย์ (DOK): แผนที่แฮชของ (แถว, คอลัมน์) → ค่า
วิธี ประสิทธิภาพของหน่วยความจำ ตัวอย่างการใช้งาน
ประธานเจ้าหน้าที่ฝ่ายปฏิบัติการ ปานกลาง ที่เก็บของทั่วไป
ความรับผิดชอบต่อสังคม จุดสูง การคำนวณเชิงตัวเลข
ดอก เรามีความยืดหยุ่น การแทรกแบบไดนามิก

ใช้กันอย่างแพร่หลายใน เรียนรู้เครื่อง (TF-IDF, เมทริกซ์ที่อยู่ติดกันของกราฟ)


26) คุณจะจัดเรียงอาร์เรย์ใหม่เพื่อให้ตัวเลขคู่และคี่สลับกันได้อย่างไร

เป้าหมายคือการสลับตัวเลขคู่และคี่ในขณะที่ยังคงรักษาลำดับสัมพันธ์ของพวกมันไว้

ขั้นตอนวิธีการ:

  1. แยกอาร์เรย์คู่และคี่
  2. รวมกันโดยสลับกันเริ่มจากคู่หรือคี่
  3. หากประเภทหนึ่งหมด ให้ผนวกประเภทที่เหลือ

ตัวอย่าง:

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

ซับซ้อน: O (n)


27) อธิบายความแตกต่างระหว่างการหมุนอาร์เรย์และการเลื่อนอาร์เรย์

Operaการ การหมุน Shiftไอเอ็นจี
คำนิยาม องค์ประกอบเคลื่อนที่เป็นวงกลม องค์ประกอบเคลื่อนที่ สถานที่ที่ว่างถูกเติมเต็ม (เช่น 0 วินาที)
ตัวอย่าง [1,2,3,4] → [3,4,1,2] [1,2,3,4] → [0,1,2,3]
ข้อมูลสูญหาย ไม่ มี (ใบกำกับภาษีเต็มรูปแบบ)
การใช้ การจัดเรียงแบบวงจร การใช้งานคิว

ในการสรุป:
การหมุนสามารถกลับด้านได้ แต่การเลื่อนมักจะทำไม่ได้


28) จะค้นหาผลคูณสูงสุดในอาร์เรย์ย่อยได้อย่างไร?

คล้ายกับอัลกอริทึมของ Kadane แต่คุณ track ทั้งค่าผลคูณสูงสุดและต่ำสุดเนื่องจากค่าลบ

ขั้นตอนวิธีการ:

  1. เริ่มต้น max_ending_here = min_ending_here = arr[0].
  2. ทำซ้ำและอัปเดตทั้งคู่ตามองค์ประกอบปัจจุบัน
  3. ติดตามการจัดส่ง max_so_far.

ตัวอย่าง:
Input: [2,3,-2,4] → เอาท์พุต: 6 (ซับบาร์เรย์ [2,3])

ซับซ้อน: บน), พื้นที่: O (1)


29) คุณจะนับจำนวนซับอาร์เรย์อย่างมีประสิทธิภาพด้วยผลรวมที่กำหนดได้อย่างไร

แนวทาง (Prefix Sum + Hash Map):

  1. รักษาผลรวมการทำงานขณะทำการวนซ้ำ
  2. สำหรับผลรวมคำนำหน้าแต่ละคำ ให้ตรวจสอบว่า (current_sum - target) มีอยู่ในแผนที่แฮช
  3. เพิ่มจำนวนให้เหมาะสม

ตัวอย่าง:

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

ความซับซ้อนของเวลา: O (n)

ความซับซ้อนของอวกาศ: O (n)


30) การจัดการบิตในปัญหาอาร์เรย์คืออะไร และนำไปใช้ที่ไหน

การจัดการบิต เกี่ยวข้องกับการดำเนินการเช่น AND, OR, XOR และการเลื่อนเพื่อแก้ไขปัญหาอย่างมีประสิทธิภาพ

การใช้งานทั่วไป:

  • การค้นหาองค์ประกอบเดียวที่ไม่เกิดการซ้ำโดยใช้ XOR
  • การตรวจสอบว่ามีเซ็ตย่อยอยู่หรือไม่โดยใช้การมาสก์บิต
  • การแสดงเซ็ตเป็นเวกเตอร์บิต

ตัวอย่าง:

ค้นหาองค์ประกอบที่ปรากฏครั้งหนึ่งในขณะที่องค์ประกอบอื่นปรากฏสองครั้ง:

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)


32) มีวิธีการเรียงลำดับอาร์เรย์อย่างไรบ้าง? อธิบายพร้อมยกตัวอย่าง

การเรียงลำดับจะจัดเรียงองค์ประกอบใหม่ตามลำดับที่กำหนด การเลือกอัลกอริทึมขึ้นอยู่กับ ขนาดข้อมูล การกระจาย และข้อจำกัดของหน่วยความจำ.

ขั้นตอนวิธี เคสที่ดีที่สุด กรณีเฉลี่ย มีเสถียรภาพ ช่องว่าง
Bubblอีเรียงลำดับ O (n) โอ(n²) มี (ใบกำกับภาษีเต็มรูปแบบ) O (1)
ผสานการเรียง O (n บันทึก n) O (n บันทึก n) มี (ใบกำกับภาษีเต็มรูปแบบ) O (n)
จัดเรียงด่วน O (n บันทึก n) โอ(n²) ไม่ O (บันทึก n)
เรียงลำดับกอง O (n บันทึก n) O (n บันทึก n) ไม่ 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อาร์เรย์ ersing
  • การรวมช่วงเวลา

ตัวอย่าง (จับคู่กับ 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 (n)


34) คุณจะค้นหาองค์ประกอบส่วนใหญ่ในอาร์เรย์ได้อย่างไร

A องค์ประกอบส่วนใหญ่ ปรากฏมากกว่า ⌊n/2⌋ ครั้ง

อัลกอริทึมการลงคะแนนเสียง Boyer–Moore แก้ไขปัญหานี้ในเวลาเชิงเส้นและพื้นที่คงที่

ขั้นตอนอัลกอริทึม:

  1. เริ่มต้น candidate และ count = 0.
  2. สำหรับแต่ละองค์ประกอบ:
    • ถ้า count = 0 ให้ตั้งค่า candidate = element.
    • การนับเพิ่ม/ลดขึ้นอยู่กับความเท่ากัน
  3. ตรวจสอบผู้สมัคร

ตัวอย่าง: [3,2,3] → เอาท์พุต: 3

ซับซ้อน: O (n)


35) ความแตกต่างระหว่างการค้นหาแบบไบนารีและการค้นหาแบบเอ็กซ์โพเนนเชียลคืออะไร?

คุณสมบัติ (Feature) การค้นหาแบบไบนารี การค้นหาแบบเลขชี้กำลัง
ความต้องการ อาร์เรย์ที่เรียงลำดับ อาร์เรย์ที่เรียงลำดับ
แนวคิดหลัก แบ่งอาร์เรย์ออกเป็นสองส่วน ค้นหาช่วงเลขชี้กำลังก่อนการค้นหาแบบไบนารี
ความซับซ้อน O (บันทึก n) O (บันทึก n)
ใช้กรณี ขนาดที่ทราบ อาร์เรย์ที่ไม่รู้จักหรือไม่มีที่สิ้นสุด

ตัวอย่าง:
สำหรับชุดข้อมูลขนาดใหญ่หรืออาร์เรย์ที่ไม่จำกัด (เช่น API แบบแบ่งหน้า) การค้นหาแบบเลขชี้กำลังสามารถค้นหาช่วงได้อย่างมีประสิทธิภาพ


36) คุณจะค้นหาองค์ประกอบที่เล็กที่สุดหรือใหญ่ที่สุดเป็นอันดับ k ในอาร์เรย์ได้อย่างไร

วิธีการ:

  1. เรียงลำดับ: การจัดเรียงและการเข้าถึง k-1ดัชนีที่ (O(n log n))
  2. ฮีปต่ำสุด/สูงสุด: มีประสิทธิภาพสำหรับการค้นหาบ่อยครั้ง (O(n log k))
  3. QuickSelect (อัลกอริทึมของ Hoare): ค่าเฉลี่ย 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 โดยที่หายไป 1 ตัวและซ้ำ 1 ตัว:

แนวทางที่ 1 (คณิตศาสตร์):
ใช้ความแตกต่างระหว่างผลรวมจริงและผลรวมที่คาดหวังและผลรวมของกำลังสอง

วิธีที่ 2 (วิธี XOR):

  1. XOR องค์ประกอบอาร์เรย์ทั้งหมดและ 1…n
  2. ผลลัพธ์จะให้ผล XOR ของตัวเลขที่หายไปและซ้ำกัน
  3. แบ่งโดยใช้บิตเซ็ตขวาสุด

ซับซ้อน: บน), พื้นที่: O (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(นาที(n, m)))

ตัวอย่าง:

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

40) ข้อดีของการใช้แบบอาร์เรย์เหนือรายการลิงก์คืออะไร

ปัจจัย แถว รายการที่เชื่อมโยง
หน่วยความจำ ติดกัน ไม่ต่อเนื่องกัน
เวลาเข้าถึง O (1) O (n)
การแทรก/การลบ แพง ที่มีประสิทธิภาพ
ตำแหน่งแคช ยอดเยี่ยม แย่ที่สุด
เหนือศีรษะ ไม่มี พื้นที่จัดเก็บตัวชี้เสริม

สรุป:
อาร์เรย์เหมาะสมที่สุดสำหรับชุดข้อมูลขนาดคงที่ที่ต้องการการเข้าถึงแบบสุ่ม ในขณะที่รายการลิงก์เหมาะสมกว่าสำหรับการแทรกและการลบแบบไดนามิก


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 (n)


42) คุณจะค้นหาองค์ประกอบในอาร์เรย์ที่มีการเรียงลำดับแบบหมุนได้อย่างไร

ใช้ การค้นหาแบบไบนารีที่ปรับเปลี่ยน เพื่อค้นหาจุดหมุนและปรับการเปรียบเทียบ

ขั้นตอนวิธีการ:

  1. หาค่ากลาง = (ต่ำ + สูง) / 2.
  2. ตรวจสอบว่า arr[mid] == target.
  3. หากเรียงลำดับครึ่งซ้าย → ค้นหาทางซ้าย หากไม่เช่นนั้น เรียงลำดับทางขวา

ตัวอย่าง:

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

ความซับซ้อนของเวลา: O (บันทึก n)


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 (n)


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
เข้าใกล้ เวลา ช่องว่าง
โหดเหี้ยม โอ(n²) O (1)
การเขียนโปรแกรมแบบไดนามิก O (n) O (n)
สองพอยน์เตอร์ O (n) O (1)

45) คุณจะค้นหาซับอาร์เรย์ที่ยาวที่สุดที่มีผลรวมเท่ากับศูนย์ได้อย่างไร

อัลกอริทึม (Hash Map):

  1. เริ่มต้นแฮชแมปเพื่อจัดเก็บผลรวมของคำนำหน้า
  2. หากผลรวมของคำนำหน้าเดียวกันปรากฏขึ้นอีกครั้ง อาร์เรย์ย่อยระหว่างดัชนีจะมีผลรวมเป็นศูนย์

ตัวอย่าง:

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

ซับซ้อน: O (n)


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) คุณจะค้นหาองค์ประกอบสมดุลในเมทริกซ์ (อาร์เรย์ 2 มิติ) ได้อย่างไร

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)

ซับซ้อน: โอ(n²)


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) แอปพลิเคชันอาร์เรย์ในโลกแห่งความเป็นจริงที่พบบ่อยที่สุดคืออะไร

อาร์เรย์ถือเป็นพื้นฐานของระบบการคำนวณและระบบโลกแห่งความเป็นจริงมากมาย

การใช้งาน:

  • การจัดทำดัชนีฐานข้อมูล: การจัดเก็บและจัดเรียงบันทึก
  • การเรียนรู้ของเครื่อง: เวกเตอร์คุณลักษณะ เมทริกซ์ และเทนเซอร์
  • การประมวลผลภาพ: ข้อมูลพิกเซล 2 มิติ และ 3 มิติ
  • Operating ระบบ: การกำหนดตารางหน่วยความจำและกระบวนการ
  • เครือข่าย: การบัฟเฟอร์และการกำหนดเส้นทางแพ็กเก็ต
  • เกมที่เล่น: สถานะผู้เล่น tracราชาและตาราง
โดเมน บทบาทของอาร์เรย์
AI / ML การแทนค่าเทนเซอร์และเมทริกซ์
DBMS การสร้างดัชนีและการเพิ่มประสิทธิภาพการค้นหา
ระบบสมองกลฝังตัว ข้อมูลเซ็นเซอร์แบบเรียลไทม์
เมฆ Computing อาร์เรย์การกระจายโหลด

อาร์เรย์ให้ แกนหลักสำหรับการจัดระเบียบข้อมูล การคำนวณ และการปรับขนาดอย่างมีประสิทธิภาพ.


🔍 คำถามสัมภาษณ์แบบอาร์เรย์ยอดนิยมพร้อมสถานการณ์จริงและคำตอบเชิงกลยุทธ์

1) อาร์เรย์คืออะไร และแตกต่างจากโครงสร้างข้อมูลอื่นอย่างไร

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการประเมินความเข้าใจพื้นฐานของคุณเกี่ยวกับอาร์เรย์ รวมถึงวัตถุประสงค์ โครงสร้าง และความแตกต่างจากประเภทข้อมูลอื่น เช่น รายการที่เชื่อมโยงหรือแผนที่แฮช

ตัวอย่างคำตอบ:
อาร์เรย์คือชุดขององค์ประกอบที่จัดเก็บอยู่ในหน่วยความจำแบบต่อเนื่อง ซึ่งแต่ละองค์ประกอบสามารถเข้าถึงได้โดยใช้ดัชนี อาร์เรย์แตกต่างจากรายการแบบลิงก์ ตรงที่ให้การเข้าถึงองค์ประกอบแบบคงที่ (O(1)) แต่จำเป็นต้องมีขนาดคงที่ที่กำหนดไว้ ณ เวลาที่สร้าง ซึ่งทำให้อาร์เรย์มีประสิทธิภาพในการอ่านข้อมูล แต่มีความยืดหยุ่นน้อยกว่าในการแทรกและลบข้อมูล


2) คุณจะค้นหาองค์ประกอบที่ใหญ่ที่สุดและเล็กที่สุดในอาร์เรย์อย่างมีประสิทธิภาพได้อย่างไร

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการตรวจสอบการคิดเชิงอัลกอริทึมและความสามารถในการเพิ่มประสิทธิภาพของคุณ

ตัวอย่างคำตอบ:
“ในการค้นหาองค์ประกอบที่ใหญ่ที่สุดและเล็กที่สุดในอาร์เรย์อย่างมีประสิทธิภาพ ฉันจะวนลูปผ่านอาร์เรย์หนึ่งครั้ง แล้วค่อยเก็บค่าที่เล็กที่สุดไว้”ping track ของค่าสูงสุดและต่ำสุดปัจจุบัน วิธีการนี้มีความซับซ้อนด้านเวลา O(n) และความซับซ้อนด้านพื้นที่ O(1) ซึ่งเหมาะสมที่สุดสำหรับปัญหานี้”


3) อธิบายว่าคุณจะลบข้อมูลซ้ำจากอาร์เรย์ที่ไม่ได้เรียงลำดับได้อย่างไร

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการประเมินความรู้ของคุณเกี่ยวกับการจัดการอาร์เรย์และโครงสร้างข้อมูลที่สามารถช่วยให้บรรลุภารกิจนี้ได้

ตัวอย่างคำตอบ:
“ผมจะใช้ชุดแฮชเพื่อจัดเก็บองค์ประกอบเฉพาะขณะวนซ้ำในอาร์เรย์ หากมีองค์ประกอบอยู่ในชุดอยู่แล้ว ผมจะข้ามไป แต่ถ้าไม่มีก็จะเพิ่มเข้าไป วิธีนี้ช่วยให้มั่นใจได้ว่าข้อมูลซ้ำจะถูกลบออกอย่างมีประสิทธิภาพด้วยความซับซ้อนของเวลา O(n) และความซับซ้อนของพื้นที่ O(n)”


4) คุณสามารถอธิบายวิธีการทำงานของการเรียงลำดับอาร์เรย์และตั้งชื่ออัลกอริทึมทั่วไปบางตัวได้หรือไม่

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์คาดหวังว่าจะคุ้นเคยกับอัลกอริทึมการเรียงลำดับที่แตกต่างกันและกรณีการใช้งานของอัลกอริทึมเหล่านั้น

ตัวอย่างคำตอบ:
การเรียงลำดับอาร์เรย์สามารถทำได้โดยใช้อัลกอริทึมต่างๆ เช่น การเรียงลำดับด่วน การเรียงลำดับแบบผสาน และ Bubblการเรียงลำดับแบบรวดเร็วมีประสิทธิภาพสำหรับกรณีทั่วไปที่มีความซับซ้อน O(n log n) ในขณะที่การเรียงลำดับแบบผสานจะนิยมใช้กับชุดข้อมูลขนาดใหญ่เนื่องจากลักษณะที่เสถียร Bubble Sort แม้จะเรียบง่ายแต่ก็ไม่ค่อยได้ใช้เนื่องจากมีประสิทธิภาพการทำงานที่ระดับ O(n²)


5) เล่าให้ฉันฟังถึงเวลาที่คุณปรับแต่งโปรแกรมที่ใช้งานอาร์เรย์อย่างหนัก

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการเข้าใจแนวทางการแก้ปัญหาและความสามารถในการปรับปรุงประสิทธิภาพของคุณ

ตัวอย่างคำตอบ:
ในบทบาทก่อนหน้า ผมได้ปรับแต่งสคริปต์ประมวลผลข้อมูลที่ใช้ลูปซ้อนกันหลายรอบบนอาร์เรย์ ด้วยการใช้การแบ่งอาร์เรย์และการดำเนินการแบบเวกเตอร์ในตัว ผมจึงลดเวลาดำเนินการลงได้เกือบ 60 เปอร์เซ็นต์ ซึ่งช่วยปรับปรุงการตอบสนองของระบบได้อย่างมาก


6) คุณจะจัดการกับข้อผิดพลาดดัชนีอาร์เรย์นอกขอบเขตอย่างไร

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์กำลังตรวจสอบความเข้าใจของคุณเกี่ยวกับการจัดการข้อผิดพลาดและแนวทางปฏิบัติในการเขียนโค้ดอย่างปลอดภัย

ตัวอย่างคำตอบ:
“ผมจะตรวจสอบให้แน่ใจว่าการเข้าถึงดัชนีทั้งหมดได้รับการตรวจสอบความถูกต้องก่อนใช้งาน โดยการตรวจสอบว่าการเข้าถึงนั้นอยู่ในช่วงความยาวของอาร์เรย์หรือไม่ นอกจากนี้ ผมจะใช้กลไก try-catch หรือวิธีการจัดการข้อผิดพลาดที่เทียบเท่ากัน เพื่อจัดการข้อผิดพลาดนอกขอบเขตที่ไม่คาดคิดได้อย่างราบรื่น”


7) คุณจะย้อนกลับอาร์เรย์โดยไม่ใช้หน่วยความจำเพิ่มเติมได้อย่างไร

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการประเมินประสิทธิภาพอัลกอริทึมของคุณและความเข้าใจเกี่ยวกับการดำเนินการในสถานที่

ตัวอย่างคำตอบ:
“ฉันจะใช้ตัวชี้สองตัว ตัวหนึ่งเริ่มจากต้นอาร์เรย์ และอีกตัวเริ่มจากท้ายอาร์เรย์ โดยการสลับตำแหน่ง”ping เมื่อนำองค์ประกอบที่ตำแหน่งเหล่านี้และย้ายตัวชี้ทั้งสองไปทางศูนย์กลางแล้ว จะสามารถกลับลำดับอาร์เรย์ในตำแหน่งเดิมได้ด้วยความซับซ้อนของเวลา O(n) และความซับซ้อนของพื้นที่ O(1)”


8) อธิบายสถานการณ์ที่คุณต้องจัดการชุดข้อมูลอาร์เรย์ขนาดใหญ่ คุณรับประกันประสิทธิภาพและความถูกต้องได้อย่างไร

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการประเมินความสามารถของคุณในการจัดการข้อมูลในโลกแห่งความเป็นจริงและการเพิ่มประสิทธิภาพการทำงาน

ตัวอย่างคำตอบ:
ในงานก่อนหน้านี้ ผมทำงานกับอาร์เรย์ตัวเลขขนาดใหญ่เพื่อวิเคราะห์ข้อมูลทางการเงิน เพื่อรักษาประสิทธิภาพ ผมใช้เทคนิคการจัดการหน่วยความจำที่มีประสิทธิภาพและการประมวลผลแบบแบตช์ นอกจากนี้ ผมยังใช้ประโยชน์จากอาร์เรย์ NumPy เพื่อดำเนินการแบบเวกเตอร์ ซึ่งช่วยเพิ่มทั้งความแม่นยำและความเร็วในการประมวลผล


9) คุณจะดำเนินการอย่างไรเพื่อค้นหาค่าที่เจาะจงในอาร์เรย์ที่เรียงลำดับแล้ว?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์คาดหวังให้คุณแสดงความรู้เกี่ยวกับอัลกอริทึมการค้นหา

ตัวอย่างคำตอบ:
สำหรับอาร์เรย์แบบเรียงลำดับ ผมจะใช้อัลกอริทึมการค้นหาแบบไบนารี ซึ่งแบ่งช่วงเวลาการค้นหาออกเป็นสองส่วนซ้ำๆ วิธีนี้ช่วยลดความซับซ้อนของเวลาลงเหลือ O(log n) ทำให้มีประสิทธิภาพมากกว่าการค้นหาแบบเชิงเส้นสำหรับชุดข้อมูลขนาดใหญ่


10) อาร์เรย์มีบทบาทอย่างไรในการแก้ไขปัญหาในโลกแห่งความเป็นจริงในการพัฒนาซอฟต์แวร์?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการทำความเข้าใจว่าคุณเชื่อมโยงความรู้ด้านเทคนิคกับการใช้งานจริงได้อย่างไร

ตัวอย่างคำตอบ:
อาร์เรย์เป็นพื้นฐานสำคัญในการพัฒนาซอฟต์แวร์ เพราะช่วยสนับสนุนการจัดเก็บและดึงข้อมูลอย่างมีประสิทธิภาพ ยกตัวอย่างเช่น ในบทบาทที่ผ่านมา ผมใช้อาร์เรย์เพื่อนำกลไกการแคชและการเรียงลำดับข้อมูลมาใช้กับแดชบอร์ดการวิเคราะห์ ซึ่งช่วยให้เข้าถึงข้อมูลได้ง่ายขึ้นและลดเวลาในการตอบสนองของคิวรีลง

สรุปโพสต์นี้ด้วย: