من رفتم سربازی اگر محتوای منو دوست داشتید و بدردتون خورد از من حمایت مالی کنید

پاسخ سوال مساحت محصور کوئرا

پاسخ سوال مساحت محصور کوئرا
پاسخ سوال مساحت محصور کوئرا

پاسخ سوال مساحت محصور کوئرا

در این نوشته تمرین “سوال مساحت محصور” که در وب‌سایت کوئرا موجود است را برای شما کاربران عزیز حل کرده‌ایم.

 

پاسخ سوال مساحت محصور کوئرا

تعدادی تخته با شماره‌های ۱ تا  در کنار هم داده شده است. ارتفاع تخته‌ی iام h_i متر و عرض آن ۱ متر است. می‌خواهیم مستطیل با بیش‌ترین مساحت محصور بین این n تخته را بیابیم. منظور از مستطیل محصور بین تخته‌ها، مستطیلی است که سطح آن تماماً درون تخته‌ها قرار گیرد.

 

ورودی سوال مساحت محصور

در خط اول ورودی عدد  و در خط بعد n عدد صحیح نامنفی داده می‌شود که عدد iام نشان‌دهنده‌ی ارتفاع تخته‌ی ام است.

 

خروجی سوال مساحت محصور

در تنها خط خروجی باید مساحت مستطیل خواسته شده را چاپ کنید.

 

حل سوال مساحت محصور

import java.util.Stack;
import java.util.Scanner;
 
public class Main
{
 
    static int getMaxArea(int hist[], int n)  
    { 
 
        Stack<Integer> s = new Stack<>(); 
        
        int max_area = 0; 
        int tp; 
        int area_with_top; 
        int i = 0; 
        while (i < n) 
        { 
            if (s.empty() || hist[s.peek()] <= hist[i]) 
                s.push(i++); 
            
            else
            { 
                tp = s.peek();  
                s.pop();  
                
                area_with_top = hist[tp] * (s.empty() ? i : i - s.peek() - 1); 
                
                if (max_area < area_with_top) 
                    max_area = area_with_top; 
            } 
        } 
 
        while (s.empty() == false) 
        { 
            tp = s.peek(); 
            s.pop(); 
            area_with_top = hist[tp] * (s.empty() ? i : i - s.peek() - 1); 
            
            if (max_area < area_with_top) 
                max_area = area_with_top; 
        } 
        
        return max_area; 
        
    } 
    
    public static void main(String[] args)  
    { 
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        int[] arr = new int[n];
        
        for(int i = 0; i < n; i++){
            arr[i] = input.nextInt();
        }
        
        System.out.println(getMaxArea(arr, arr.length)); 
    } 
}

منبع سوال‌: وب‌سایت کوئرا

 

اگر روش حل بهتری برای”مساحت محصور” دارید برای ما ارسال کنید تا با نام خودتان به اشتراک بگذاریم.

اگر سوال خاصی را مدنظر دارید در بخش نظرات برای ما ارسال کنید تا حل آن سوال را در الویت محتوای سایت بگذاریم.

برای امتیاز به این نوشته کلیک کنید!
[کل: 2 میانگین: 5]