太阳能板最大面积
一、题目描述给航天器一侧加装长方形或正方形的太阳能板图中的红色斜线区域需要先安装两个支柱图中的黑色竖条再在支柱的中间部分固定太阳能板。但航天器不同位置的支柱长度不同太阳能板的安装面积受限于最短一侧的那根支柱长度。现提供一组整形数组的支柱高度数据假设每根支柱间距离相等为1个单位长度计算如何选择两根支柱可以使太阳能板的面积最大。二、输入输出描述输入描述一行由逗号分隔的整数表示支柱高度。输出描述一个整数表示最大太阳能板面积。三、示例输入10,9,8,7,6,5,4,3,2,1输出25说明10米高支柱和5米高支柱之间宽度为5高度取小的支柱高也是5面积为25。任取其他两根支柱所能获得的面积都小于25。所以最大的太阳能板面积为25。四、解题思路1. 核心思想使用双指针法从两端向中间贪心收缩每次移动较矮的一侧指针在遍历过程中计算并记录最大面积用 O (n) 时间复杂度找到最优解。2. 问题本质分析这是一个最优面积求解问题容器面积公式面积 宽度 × 两侧高度的较小值约束只能选择两条竖线目标面积最大化本质是利用贪心策略减少无效遍历高效找到最优两条线。3. 核心逻辑初始状态左指针在最左右指针在最右宽度最大。面积计算每次用两指针间距作为宽度较矮高度作为高计算面积。贪心移动一定移动高度更矮的指针因为移动高侧无法让面积变大。记录最大值遍历过程中不断更新最大面积。4. 步骤拆解输入处理读取逗号分隔的输入字符串转为整数数组height双指针初始化left 0最左right 数组长度-1最右maxArea 0循环收缩指针计算当前宽度、高度、面积更新最大面积移动较矮一侧的指针输出结果输出遍历得到的最大面积五、代码实现import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc new Scanner(System.in); // 读取输入并按逗号分割 String[] strs sc.next().split(,); int[] height new int[strs.length]; for (int i 0; i strs.length; i) { height[i] Integer.parseInt(strs[i]); } // 双指针 int left 0; int right height.length - 1; long maxArea 0; // 用long防止溢出 while (left right) { int w right - left; int h Math.min(height[left], height[right]); long area (long) w * h; // 更新最大面积 if (area maxArea) { maxArea area; } // 移动较矮的指针 if (height[left] height[right]) { left; } else { right--; } } System.out.println(maxArea); } }