太阳能板最大面积

标题:太阳能板最大面积 | 时间限制:1秒 | 内存限制:32768K | 语言限制:不限
给航天器一侧加装长方形或正方形的太阳能板(图中的红色斜线区域),需要安装两个支柱(图中的黑色竖条),再在支柱的中间部分固定太阳能板。但航器不同位置的支柱长度不同,太阳能板的安装面积受限于最短一侧的那根支柱长度。如图:


let line;
while(line=readline()){
    let lines = line.split(" ");
    let list = lines[0].split(',');
    let maxAera=0;
    let List1 = [];
    let List2=[];
    for (let i = 0; i < list.length; i++) {
       
        for (let j = i; j < list.length; j++) {
            let minArea = parseInt(list[i]) > parseInt(list[j])?list[j]:list[i];
            let Area = parseInt(minArea) * (j - i);
            maxAera = Math.max(Area,maxAera);
        }
    }
    console.log(maxAera);
}
#include <iostream>
#include <string>
#include <vector>
using namespace std;

#define MIN(a,b) (a>b)?(b):(a)

int account(vector<long> &input){
    int length = input.size();
    long long max = 0;
    for(int i = 0; i != length; i++){
        for(int j = i + 1; j != length; j++){
            int min_val =  MIN(input[i],input[j]);
            long tmp = min_val*(j-i);
            if(tmp > max){
                max = tmp;
            }
        }
    }
    return max;
}

int main(int argc, char** argv){
    string input;
    while(cin >> input){
        int length = input.length();
        int index = input.npos;
        bool is_last_sym = false;
        vector<long> m_data;
        for(int m = 0; m != length; m++){
            char tmp = input[m];
            if(tmp == ','){
                if(is_last_sym){
                    continue;
                }
                if(index != input.npos){
                    m_data.push_back(atol(input.substr(index, m - index).c_str()));
                } else {
                    is_last_sym = true;
                    continue;
                }
                /*if(m != length - 1){
                    index = m + 1;
                } else {
                    index = input.npos;
                }*/
                index = input.npos;
                is_last_sym = true;
            } else {
                if(index == input.npos){
                    index = m;
                    is_last_sym = false;
                }
            }
        }
        if(index != input.npos){
            m_data.push_back(atol(input.substr(index).c_str()));
            index = input.npos;
        }
        cout << account(m_data) << endl;
    }
} // manfen

import java.util.*;

public class Main{
    /**
    * 将字符串解析成int数组
    */
    private static int[] toArray(String input) {
        if (input==null || input.length()<=0) {
            return new int[0];
        }
        // 分割字符串
        String[] arr = input.split(",");
        // 转成整形数组
        int[] result = new int[arr.length];
        for(int i=0;i<arr.length;++i) {
            result[i] = Integer.valueOf(arr[i]);
        }
        return result;
    }
    
    /**
    * 核心逻辑,计算最大面积
    * 可以考虑简化计算(假设选中的左、右柱子分别为i,j;那么如果左边有柱子比i处还高,那肯定有更大的面积,右侧同理);时间问题,暂不优化代码
    */
    private static int getMaxArea(String str) {
        int[] heights = toArray(str);
        int result = 0;
        // 暴力解法,时间复杂度~O(n*(n-1))
        for (int i=0;i<heights.length-1;++i) {
            for (int j=i+1;j<heights.length;++j) {
                // 计算面积
                int len = Math.min(heights[i], heights[j]);
                int area = len * (j-i);
                // 记录最大值
                result = Math.max(result, area);
            }
        }
        return result;
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.next();
        System.out.println(getMaxArea(input));
    }
}



全部评论
leetcode 盛水最多容器问题
点赞 回复 分享
发布于 2023-08-01 11:48 湖南

相关推荐

项目和八股忘了好多,后天就面试了,会脏面评嘛
一切顺利喵:我也春招被字节捞了,然后,全背八股了,面试全问的项目,全忘记了
点赞 评论 收藏
分享
评论
点赞
5
分享

创作者周榜

更多
牛客网
牛客企业服务