二维数组 元素的连续求解

本文介绍了一个Java程序,该程序用于查找二维数组中连续存放的0的最大数量,并确定这些连续的0是在哪一行或哪一列。通过遍历数组,程序能够记录每一行和每一列的连续0的数量,并最终输出具有最多连续0的位置。
import java.util.HashMap;


public class Title {
public static void main(String[] args){
f();
}

// 二位数组的应用
//12、二维数组中,哪一行或哪一列的连续存放的0的个数最多,是几个0。注意,是“连续”。
public static void f(){
int[][] a = {{0,1,2,4,0,0,3,0,1,0},{0,0,2,4,5,0,3,0,1,1},{0,1,0,0,0,0,3,0,1,0}};
int[][] count = new int[a.length][1];

// 行
int maxCountH = 0;
for(int i=0;i<a.length;i++){
int temp = 1; //默认有一个 0
int j=1;
for(;j<a[i].length;j++){
if(a[i][j]==a[i][j-1] && a[i][j-1]==0){
temp++;
}
}
if(temp>maxCountH){
maxCountH = temp;
}
count[i][0] = temp;
}
//列
int maxCountL = 0;
int[][] liecount = new int[a[0].length][1]; //保存列中所有的最大值
for(int i=0;i<a[0].length;i++){
int temp = 1; //默认有一个 0
for(int j=1;j<a.length;j++){
if(a[j][i]==a[j-1][i] && a[j][i]==0){
temp++;
}
}
if(temp>maxCountL){
maxCountL=temp; //保存最大
}
liecount[i][0] = temp;
// System.out.println("在列的方向0的个数:"+temp);
}
System.out.println("行的最大为:"+maxCountH);
System.out.println("列的最大为:"+maxCountL);
if(maxCountH>maxCountL){
//连续最大的在行中 为:maxCountH
for(int i=0;i<count.length;i++){
for(int j=0;j<count[i].length;j++){
if(count[i][j]==maxCountH){
System.out.println("最大的连续数在"+(i+1)+"行");
}
}
}
}else{
for(int i=0;i<liecount.length;i++){
for(int j=0;j<liecount[i].length;j++){
if(liecount[i][j]==maxCountL){
System.out.println("最大的连续数在"+(i+1)+"列");
}
}
}
}


}


}
### C语言中使用 `sizeof` 计算二维数组的大小 在C语言中,`sizeof` 运算符可以用于获取不同类型的数据对象占用内存的空间大小。对于多维数组而言,理解其存储方式有助于更精确地计算尺寸。 #### 定义静态二维数组求解其大小 当声明一个固定大小的二维数组时,可以直接应用 `sizeof` 来获得整个数组占据的总字节数: ```c #include <stdio.h> int main() { int array[3][4]; // 创建了一个具有3行4列的整型二维数组 printf("Size of the whole 2D-array is: %zu bytes\n", sizeof(array)); } ``` 这段程序展示了如何创建一个简单的三维整形数组,并通过调用 `sizeof()` 函数来打印出该数组总共需要多少个字节[^1]。 #### 动态分配二维数组及其大小测量 如果要处理动态分配的二维数组,则情况稍微复杂一些。通常情况下,可以通过指针指向的一级或多级间接寻址实现这种结构。这里给出一种常见的方式——利用单次连续内存块模拟二维布局的方法: ```c #include <stdlib.h> #include <stdio.h> void createDynamicArray(int **arrayPtr, size_t rows, size_t cols){ (*arrayPtr) = (int *)malloc(rows * cols * sizeof(int)); if ((*arrayPtr)) { for(size_t i=0;i<rows;++i){ for(size_t j=0;j<cols;++j){ *((*arrayPtr)+i*cols+j)=rand()%10; } } } } int main(){ int *dynamicArr=NULL; const size_t row_count=5,col_count=7; createDynamicArray(&dynamicArr,row_count,col_count); printf("Allocated memory block size:%zu bytes.\n",row_count*col_count*sizeof(int)); free(dynamicArr); //记得释放资源 } ``` 此代码片段说明了怎样构建一个由单一指针管理的大块线性区域作为逻辑上的矩形网格表示法;同时也示范了如何基于已知维度乘积以及元素类型的宽度推导出实际所需的内存量[^3]。 需要注意的是,在上述例子中并没有直接对所谓的“二维数组”本身取 `sizeof` ,因为一旦脱离编译期确定的具体变量名而转向运行期间操作(即涉及到了 `malloc` 或者其他形式的手动分配),就不再能像对待常规局部或全局命名实体那样方便地查询它们的整体规模了。不过,只要掌握了基础理论知识,就可以很容易地根据上下文条件自行推理得出结论。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值