โจทย์
ดูต้นฉบับ (ภาษาอังกฤษ)ฮิสโตแกรมมีแท่งที่มีความกว้าง 1 หน่วย โดยมีความสูงตามที่กำหนด จงหาพื้นที่ของสี่เหลี่ยมผืนผ้าที่ใหญ่ที่สุดซึ่งอยู่ภายในแท่งทั้งหมด วิธีใช้ monotonic stack สามารถแก้ปัญหานี้ได้ในเวลา O(n)
ให้เขียนฟังก์ชัน largest_rectangle(heights)
อินพุต
heights: ความสูงของแท่งแต่ละแท่งจากซ้ายไปขวา
เอาต์พุต
คืนค่าพื้นที่ที่มากที่สุด
เงื่อนไข
0 ≤ ความยาว ≤ 200,000; 0 ≤ ความสูง ≤ 1,000,000,000
ตัวอย่าง
อินพุต:
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
อินพุต:
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 กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน