#题目要求#
#题目分析#
1.正方形边长相等
2.正方形中所有对象必须为1
#代码撰写#
1.主函数部分,将二维数组设置为[5][4],并借用random函数为数组赋值
设置boxCheck函数为求出该二维数组中由1组成的最大正方形
public static void main(String[] args) {
// 创建数组
int[][] arr = new int[5][4];
random(arr);
int maxArea = boxCheck(arr);
System.out.println("最大的正方形面积是" + maxArea);
}
2.random方法生成数组,利用两层循环为数组赋值
//方法随机生成数组
public static void random(int[][] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
arr[i][j] = (int) (Math.random() * 2);
System.out.print(arr[i][j] + "\t");
}
System.out.println("");
}
}
3.boxCheck方法找到最大的正方形
主要思想:将定义的数组看成一个长方形,比较两边长得到较小值,以较小值作为基准框选正方形判断是否是内部元素全为1的正方形,如果不是,则进行上下左右的移动。在移动结束后如果得到的正方形依旧不符合条件则对框选正方形的边长减一,再次进行上述操作直到得到首个符合题意的内部全为1的正方形即为最大正方形,载根据边长相乘就可以得出面积。
//方法生成框选区域进行遍历
public static int boxCheck(int[][] arr) {
// 根据数组的两个下表找到数组的正方形的最大边长(最大边长是二者之中较小的角标)
int len = Math.min(arr.length, arr[0].length);
// 因为最大边长为4(arr[5][4]),虚构一个4*4的正方形在数组中框选
while (len > 1) {
for (int i = 0; i < arr.length - len; i++) {// 在循环中将虚构的正方形下移
for (int j = 0; j < arr[0].length - len; j++) {// 在循环中将虚构的正方形右移
boolean key = true;// 表明变量,后续有用
// 遍历框选正方形中每个数据,判断是不是0
o: for (int abscissa = i; abscissa < i + len; abscissa++) {// 遍历横坐标
for (int ordinate = j; ordinate < j + len; ordinate++) {
if (arr[abscissa][ordinate] == 0) {
key = false;
break o;
}
}
}
if (key == true) {
return len * len;
}
}
}len--;// 4*4遍历结束不存在不合要求的正方形,让边长减一重新遍历
}
return len * len;
}
#运行结果#
标签:arr,最大,int,++,len,正方形,数组 From: https://blog.csdn.net/m0_72186118/article/details/140730498