โจทย์ทั้งหมด
ยาก 0 ข้อที่แก้แล้ว อัตราผ่าน 0%

สี่เหลี่ยมผืนผ้าที่ใหญ่ที่สุดในฮิสโตแกรม

หาสี่เหลี่ยมผืนผ้าที่ใหญ่ที่สุดที่สามารถวางอยู่ใต้ฮิสโตแกรมได้

ฮิสโตแกรมมีแท่งที่มีความกว้าง 1 หน่วย โดยมีความสูงตามที่กำหนด จงหาพื้นที่ของสี่เหลี่ยมผืนผ้าที่ใหญ่ที่สุดซึ่งอยู่ภายในแท่งทั้งหมด วิธีใช้ monotonic stack สามารถแก้ปัญหานี้ได้ในเวลา O(n)

ให้เขียนฟังก์ชัน largest_rectangle(heights)

อินพุต

heights: ความสูงของแท่งแต่ละแท่งจากซ้ายไปขวา

เอาต์พุต

คืนค่าพื้นที่ที่มากที่สุด

เงื่อนไข

0 ≤ ความยาว ≤ 200,000; 0 ≤ ความสูง ≤ 1,000,000,000

ตัวอย่าง

ตัวอย่างที่ 1
อินพุต:
heights = [2, 1, 5, 6, 2, 3]

ผลลัพธ์ที่คาดหวัง:
expected = 10
อินพุต:
std::vector<long long> heights = {2, 1, 5, 6, 2, 3};

ผลลัพธ์ที่คาดหวัง:
long long expected = 10;
อินพุต:
long[] heights = new long[] {2, 1, 5, 6, 2, 3};

ผลลัพธ์ที่คาดหวัง:
long expected = 10;

คำอธิบาย

แท่งที่ 5 และ 6 รวมกันได้สี่เหลี่ยมผืนผ้ากว้าง 2 หน่วย สูง 5 หน่วย: พื้นที่ 10

ตัวอย่างที่ 2
อินพุต:
heights = [4]

ผลลัพธ์ที่คาดหวัง:
expected = 4
อินพุต:
std::vector<long long> heights = {4};

ผลลัพธ์ที่คาดหวัง:
long long expected = 4;
อินพุต:
long[] heights = new long[] {4};

ผลลัพธ์ที่คาดหวัง:
long expected = 4;

คำอธิบาย

แท่งเดียวที่สูง 4 หน่วย มีพื้นที่ 4

แหล่งอ้างอิง

โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน

เรียนรู้จากคนอื่น

แนวทางจากชุมชน

ยังไม่มีวิธีทำที่เผยแพร่ ลองแก้โจทย์นี้เพื่อแชร์วิธีแรก