凑字数66666666666666666666666666666666666666666
1条回答 默认 最新
关注 public class Main { public boolean test(int[][] arr, int line, int column){ //记录遍历到每个位置的时候,最大的相同数 int[][] temp = new int[line][column]; temp[0][0] = 1;//最小是1 //2层循环,遍历整个二维数组 for (int i=0;i<line;++i){ for (int j=0;j<column;++j){ //topV leftV 当前位置的上边和下边最大数量 int topV = i > 0 ? temp[i-1][j] : 0; int leftV = j > 0 ? temp[i][j-1] : 0; //当前位置上边和左边的数组的值 int top = i > 0 ? arr[i-1][j] : -1; int left = j > 0 ? arr[i][j-1] : -1; //如果当前位置和上左都一样,那么取最大的 if(arr[i][j] == top && arr[i][j] == left){ temp[i][j] = Math.max(topV, leftV) +1; }else if(arr[i][j] == top){ temp[i][j] = topV+1; }else if (arr[i][j] == left){ temp[i][j] = leftV +1; }else { temp[i][j] = 1; } //如果已经右3个一样了,就不循环了,直接返回true if(temp[i][j] == 3){ return true; } } } return false; } public static void main(String[] args) { int[][] a = new int[][]{{4,4,1,4},{2,2,1,2},{2,2,1,2},{3,1,3,1}}; System.out.println(new Main().test(a, 4,4)); } }
最坏情况需要遍历1次数组,时间复杂度是O(MN), 空间复杂度也是MN
说明:用一维数组来做解释
比如数组: 1 2 2 3 3 3
遍历数组,下标为0,最大重复数为1,
下标1,2 !=1 ,最大重复数也是1
到下标2的时候, 2 等于前一个2,那么用前一个的最大重复数1,加上1 就是2。
因此,循环之后,得到一个新数组 1 1 2 1 2 3本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
- ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
- ¥15 CSAPPattacklab
- ¥15 一直显示正在等待HID—ISP
- ¥15 Python turtle 画图
- ¥15 关于大棚监测的pcb板设计
- ¥15 stm32开发clion时遇到的编译问题
- ¥15 lna设计 源简并电感型共源放大器
- ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
- ¥15 Vue3地图和异步函数使用