ฉันต้องยอมรับว่าที่นี่ฉันเป็นหนึ่งในคนที่ชอบถามคำถามอัลกอริทึมในการสัมภาษณ์ แต่ฉันต้องเครียดว่าคำตอบที่แท้จริงสำหรับคำถามนั้นไม่เกี่ยวข้องอย่างแน่นอน ฉันไม่สนใจแม้แต่น้อยหากผู้ให้สัมภาษณ์รู้คำตอบหรือไม่ สำหรับฉันคำถามนี้ตั้งเป้าหมายในแง่มุมต่าง ๆ กันดังต่อไปนี้ - ตามลำดับความสำคัญ:
ความต้องการ
คำถามดังกล่าวอยู่ภายใต้การระบุอย่างจงใจ ในตัวอย่างของคุณไม่มีรายละเอียดเพิ่มเติมเกี่ยวกับลำดับ หากคุณมีผู้ให้สัมภาษณ์ที่ถามคุณว่าตัวเลขเหล่านี้ถูกเรียงจริงหรือไม่นั่นเป็นสัญญาณที่ดี เขามีความคิดที่ถูกต้องที่จะถามลูกค้าเกี่ยวกับรายละเอียดเพิ่มเติมซึ่งจะช่วยให้การแก้ปัญหาที่ดีขึ้นในเวลาอันสั้น ผู้สมัครอาจเล่นด้วยความคิดในการใช้พื้นที่ O (n) เพื่อเก็บอาร์เรย์ของตัวเลข N แต่เขาไม่ควรทำอย่างนั้นโดยไม่ถามรายละเอียดเพิ่มเติมเกี่ยวกับ X และ Y สมมติว่า X และ Y อยู่ระหว่าง 1 ถึง 1,000 จากนั้นตรวจสอบให้แน่ใจว่าไปข้างหน้าและดับโซลูชันอาร์เรย์ที่ใช้ แต่ถ้าฉันบอกคุณว่าช่วงเวลาคือ 1 และ 1 พันล้านแล้วปัญหาจะกลายเป็นช่วงที่แตกต่างกันโดยสิ้นเชิง ขอให้ฉันเครียดอีกครั้งว่าฉันไม่สนใจวิธีแก้ปัญหา
เทคนิคมาตรฐาน
ฉันไม่ต้องการจ้างโปรแกรมเมอร์ที่ไม่รู้ด้วยซ้ำว่า O (n) หมายถึงอะไร นั่นเป็นสิ่งที่ต้องรู้อย่างแน่นอนหากคุณมีการศึกษาที่เหมาะสมในพื้นที่นั้น แต่มันก็สำคัญไม่เพียงแค่รู้ว่ามันหมายถึงอะไร แต่เพื่อนำความรู้นั้นไปใช้จริง ในตัวอย่างของคุณฉันต้องการให้ผู้สมัครรับรู้ว่าเขาไม่ได้รับอนุญาตให้จัดเรียงข้อมูล (โดยไม่ถามคำถามเพิ่มเติมที่กำหนดเป้าหมายไปที่ตัวเลือกการจัดเรียงกลุ่มข้อมูลหรือวิธีการเรียงลำดับ O (n) อื่น ๆ ) เนื่องจากการเรียงลำดับที่ต้องการ O (n log n) โดยทั่วไป
ในทำนองเดียวกันคำถามอื่น ๆ ของอัลกอริทึมกำหนดเป้าหมายเทคนิคมาตรฐานเช่นต้นไม้หรือกราฟการสำรวจเส้นทางหรือการเรียกซ้ำ ผู้สมัครอาจส่งหนึ่งในเทคนิคเหล่านี้ซึ่งไม่ได้สร้างความประทับใจที่ดี อย่างไรก็ตามในกรณีเช่นนี้ฉันต้องการขุดลึกลงไปเพื่อค้นหาว่าผู้สมัครมีพื้นฐานด้าน CS หรือไม่ แน่นอนมันขึ้นอยู่กับตำแหน่งเป้าหมาย แต่โดยปกติแล้วนักพัฒนาที่ไม่ทราบเกี่ยวกับความซับซ้อนของรันไทม์หรือโครงสร้างข้อมูลทั่วไปและการสำรวจเส้นทางของพวกเขาจะไม่ได้รับความช่วยเหลือใด ๆ
ความคิดในการจัดการปัญหา
หลังจากถามคำถามคุณตรวจสอบผู้สมัครอย่างใกล้ชิด เขา / เธอตอบสนองอย่างไร? คุณจะได้รับผลลัพธ์ที่ดีที่สุดที่นี่จากผู้ที่มีอย่างไม่มีเงื่อนงำเกี่ยวกับวิธีการแก้ปัญหาที่เกิดขึ้นในตอนแรก ในแง่ที่ว่าคำถามจะตรวจสอบสิ่งที่อาจเกิดขึ้นหากสถานการณ์ที่คล้ายกันเกิดขึ้นในที่ทำงานในภายหลัง คุณอาจเกิดปัญหาในระหว่างการพัฒนาของคุณและเป็นการดีที่จะทราบว่าผู้สมัครของคุณเกี่ยวข้องกับปัญหาเหล่านี้อย่างไรแม้ว่าเขา / เธอจะไม่สามารถแก้ไขได้ด้วยตนเอง
ตัวอย่าง: คุณไม่ต้องการให้ผู้สมัครของคุณเข้าสู่โหมดเงียบในอีกครึ่งชั่วโมง! ตรวจสอบว่าเขาสามารถคิดคำถามอัจฉริยะได้หรือไม่ (ดูข้อกำหนด) ตรวจสอบว่าเขาเริ่มคิดนอกกรอบเมื่อเขาตระหนักว่าเขาไม่สามารถทำได้ แม้แต่คำถามตอบโต้ที่ "สนุก" เหมือน "ฉันขอใช้ตัวเลือกโทรศัพท์กับเพื่อนร่วมงานได้ไหม" เป็นสัญญาณที่ดี
วิธีตอบ
โดยทั่วไปคำตอบที่ดีที่สุดที่คุณสามารถให้สำหรับคำถามประเภทนี้คือคำถามตอบโต้! การบอกคำตอบทันทีโดยทั่วไปล้มเหลวทั้งหมดและในความเป็นจริงไม่ใช่คำตอบที่ดีเลยเพราะคำถามเหล่านี้ทั้งหมดบอกใบ้ในการแลกเปลี่ยนซึ่งคำตอบของคุณบ่งบอกโดยที่คุณไม่ต้องมีข้อมูลที่จำเป็น การออก แน่นอนว่าคุณภาพของคำถามตอบโต้นั้นแตกต่างกันระหว่างผู้สมัคร
ในฐานะที่เป็นบันทึกทั่วไปของคำถามสัมภาษณ์: คำถามตอบโต้เป็นสิ่งที่ไม่ดี ในการสัมภาษณ์ของฉันฉันได้ถามคำถามดังนี้: "ถ้าคุณต้องใช้ X คุณจะเลือก C ++ หรือ Java สำหรับสิ่งนั้นและทำไม" - ฉันโต้กลับกับ "ฉัน จำกัด แค่สองสิ่งนี้หรือไม่?" คิดว่าตัวเองเป็นปฏิกิริยาแบบไหนที่คุณได้รับจากผู้สัมภาษณ์สำหรับคำถามตอบโต้ - และมันง่ายขนาดไหนที่คุณจะแสดงให้ผู้สัมภาษณ์เห็นว่าคุณมีความสามารถอย่างไร
find the missing element in O(N) or better
หมายของคำว่า"ดีกว่า"ในบริบทนี้คืออะไร? ดูเหมือนว่าเป็นสิ่งที่จะแก้ไขได้อย่างง่ายดายในขณะที่วน แต่ฉันไม่เข้าใจ - มันแก้ไขหรือไม่แก้ไขใช่ไหม?