ถ้าฉันเข้าใจปัญหาได้อย่างถูกต้อง (และฉันอาจไม่รู้สึกฟรีที่จะบอกฉันว่าฉันทำไม่ได้) คุณต้องการแปลงตาราง 2D เป็นอาร์เรย์เรียงลำดับ 1D ในขณะที่แต่ละแถวและคอลัมน์เรียงลำดับแล้วในตาราง 2D
องค์ประกอบแรกในรายการในกรณีนี้จะต้องเป็นมุมบนซ้าย ((0,0) ตามคำนิยามของปัญหา) หลังจากนี้จะต้องเป็นองค์ประกอบ (1,0) หรือ (0,1) ตามที่คนอื่น ๆ ทั้งหมดจะมีขนาดใหญ่กว่าเหล่านี้ตามคำนิยาม
คุณสามารถพูดคุยโดยบอกว่าองค์ประกอบที่เล็กที่สุดถัดไปในกริดมักจะอยู่ด้านล่างองค์ประกอบที่ใช้อยู่แล้วเสมอ (หรือขอบของกริด) และทางด้านขวาขององค์ประกอบที่ใช้ไปแล้ว (หรือขอบของกริด) เนื่องจากทั้งสอง กำหนดให้เล็กกว่านั้น ดังนั้นในการวนซ้ำแต่ละครั้งคุณต้องพิจารณาค่าที่น้อยที่สุดที่เป็นไปตามข้อกำหนดนี้
คุณสามารถรักษาผู้สมัครที่เป็นไปได้ตามลำดับขณะที่คุณพบพวกเขา (ไม่เกินสองคนจะถูกทำให้พร้อมใช้งานในการทำซ้ำครั้งเดียว) และในการทำซ้ำแต่ละครั้งให้ตรวจสอบค่าใหม่ที่มีให้ (ถ้ามี) หากพวกเขาต่ำกว่าต่ำสุดของผู้สมัครก่อนหน้าเพิ่มพวกเขาในรายการทันทีและทำซ้ำมิฉะนั้นเพิ่มผู้สมัครที่ต่ำสุดก่อนหน้านี้และเปรียบเทียบกับต่ำสุดถัดไป ฯลฯ
น่าเสียดายที่ฉันไม่ได้อ้างว่าสามารถให้ความซับซ้อนที่แน่นอนกับสิ่งนี้ได้หรือฉันไม่อ้างว่ามันมีประสิทธิภาพมากที่สุดเท่าที่จะเป็นไปได้ แต่ดูเหมือนว่าจะดีกว่าวิธีการที่ไร้เดียงสาและฉันหวังว่าฉันจะอธิบายให้ดีพอ
แก้ไข: สำหรับกริดแบบนี้ฉันเชื่อว่าใช้หลักการพื้นฐานเดียวกันนี้ แต่การทำซ้ำแต่ละครั้งจะมีผู้สมัครใหม่ถึง n คนและผู้สมัครเหล่านี้จะต้องเป็นองค์ประกอบที่ไม่ได้ใช้น้อยที่สุดในแต่ละมิติในตอนนี้