java矩阵基础运算

java矩阵基础运算通用方法 后面的题没有处理数组或矩阵本身为空的情况 可以在开头判断一下长度 是 0 就直接 return 模拟 第一题 顺时针一圈一圈的遍历 与左上角和右下角的坐标作比较 直到两坐标交错 当 leftUpRow leftUpColumn rightDownRow rightDownCol 都相等时会剩中间一个中心元素时单独加 if 处理

大家好,我是讯享网,很高兴认识大家。



通用方法

 
讯享网 
讯享网

后面的题没有处理数组或矩阵本身为空的情况,可以在开头判断一下长度,是0就直接return

模拟

第一题

顺时针一圈一圈的遍历,与左上角和右下角的坐标作比较,直到两坐标交错。

当leftUpRow、leftUpColumn、rightDownRow、rightDownColumn都相等时会剩中间一个中心元素时单独加if处理

 

第二题

 不能直接遍历,遇到0就清零,这样会导致被清零的数也当成0,清零他的行列

所以先记录再清零

讯享网

第三题

 

设置一个标志l2r,来控制从从左下到右上遍历还是从右上到左下遍历

每次横着或竖着改变坐标时,l2r就要变

从左下到右上遍历,就横坐标--,纵坐标++;

从右上到左下遍历,就横坐标++,纵坐标--;

但遇到四个边界时要单独控制移动方向

 

第四题

枚举法:

因为找最大正方形边长,所以从大到小枚举

先找N边长的矩形,再找N - 1,N - 2……

先找左上作为顶点,两层for

再找其他构成边的点 模拟各边遍历,进行检验

 

改进

即:预处理

记录每个元素,右边和下边,包括自己在内的连续的1的数量-->(右边,下面)

--------预处理后--------

 

其他步骤都一样

只有 “再找其他构成边的点 模拟各边遍历,进行检验” 这个进行改进

用左上角的顶点作为依据点

用她画边框进行检验

也就是取边框的几个顶点,利用对应点的预处理,组成边框的四条边,进行判断

java矩阵基础运算

有很多组合,比如

左上角的点右边的1的数目>=n

左上角的点下边的1的数目>=n

左下角的点右边的1的数目>=n

右上角的点下边的1的数目>=n

 

第五题

法一:暴力解法

模拟每一个子数组,进行累加,每增加一个元素,就和最大和作比较,进行更新

 

法二

遍历求和,如果求出来的和是负数,说明对后续累加出来的最大值没有贡献,则子数组的起点从他的下一个元素开始,每次都查看有没有贡献,没有就舍去

 

如果想知道最大和对应的子数组,就设两个指针,存子数组的开头结尾(索引)

 

第六题

 利用第五题的思想

假设只有一行,就可以直接调用第五题的函数

如果有两行,就把两行加一起,再调用第五题的函数

如果有三行,同上

所以,核心思想:把矩阵处理成行向量,调用第五题的函数

设定一个基准行,把它后面的行,一行一行的累加,每加一行就调用第五题的函数,并更新maxSum,即可求出


                    
小讯
上一篇 2024-12-25 09:48
下一篇 2025-01-01 12:16

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/1400.html