题目链接:NC46
题意、输入、输出:

分析:注意这里火柴不能拼接
思路:计算每一个长度有多少个,优先拼正方形
代码:
import java.util.*;
public class Solution {
/**
*
* @param n int整型 n
* @param Stick int整型一维数组 Stick
* @return long长整型一维数组
*/
static int maxn=(int)1e5+5;
public long[] MaxArea (int n, int[] Stick) {
// write code here
long[] ans=new long[2];
int[] cnt=new int[maxn];
int maxlen=0;
for(int len:Stick){
if(len>maxlen)maxlen=len;
cnt[len]++;
}
for(int i=1;i<=maxlen;i++){
if(cnt[i]>=4){
int t=cnt[i]/4;
ans[1]+=(long)t*i*i;
cnt[i]-=t*4;
}
if(cnt[i]==3)ans[0]+=(long)i*i;
}
return ans;
}
}
本文解析了NC46题目中火柴拼正方形的算法实现,介绍了如何计算不同长度火柴的数量,并优先尝试拼成正方形,避免火柴拼接,提供了完整的Java代码示例。

被折叠的 条评论
为什么被折叠?



