35 求一个矩阵中最大的二维矩阵(元素和最大)
2014-09-21 20:42
399 查看
/* 35. 求一个矩阵中最大的二维矩阵(元素和最大).如: 1 2 0 3 4 2 3 4 5 1 1 1 5 3 0 中最大的是: 4 5 5 3 要求:(1)写出算法;(2)分析时间复杂度;(3)用 C 写出关键代码 思想很简单,每次计算周围的四个矩阵的元素和 计算二维子矩阵的和(sum=a[i,j]+a[i+1,j]+a[i,j+1]+a[i+1,j+1]) 时间复杂度为O(i*j) 因为必须同时计算4个元素,有很多重复计算,所以可以适当减少点 复杂度相同 效率高些 */ #include<iostream> #include<stdio.h> using namespace std; int getMax2Array(int a[][5],int row,int col,int ans[]) { int i,j,max,ans_i,ans_j,last2Sum,sum; max=-1; for(i=0;i<row-1;i++) { last2Sum=a[i][0]+a[i+1][0];//一行开始 for(j=1;j<col;j++) { sum=last2Sum; last2Sum=a[i][j]+a[i+1][j]; sum+=last2Sum; if(max<sum) { max=sum; ans_i=i;//行是一样,列减1 ans_j=j-1; } } } ans[0]=ans_i;//返回最大位置 ans[1]=ans_j; return max; } int main() { int a[3][5]={{1,2,0,3,4},{2,3,4,5,1},{1,1,5,3,0}}; int b[3][5]={{1,2,0,3,4},{2,3,4,5,1},{1,7,5,3,0}}; int ans[2],max,i; max=getMax2Array(a,3,5,ans); printf("原来数组中最大二维数组的和为:%d\n",max); printf("%d %d\n",a[ans[0]][ans[1]],a[ans[0]][ans[1]+1]); printf("%d %d\n",a[ans[0]+1][ans[1]],a[ans[0]+1][ans[1]+1]); max=getMax2Array(b,3,5,ans); printf("原来数组中最大二维数组的和为:%d\n",max); printf("%d %d\n",b[ans[0]][ans[1]],b[ans[0]][ans[1]+1]); printf("%d %d\n",b[ans[0]+1][ans[1]],b[ans[0]+1][ans[1]+1]); return 0; }
相关文章推荐
- IT公司100题-35- 求一个矩阵中最大的二维矩阵(元素和最大)
- 【100题】三十五 求一个矩阵中最大的二维矩阵(元素和最大)
- 求一个矩阵中最大的二维矩阵(元素和最大).
- 求一个矩阵中最大的二维矩阵(元素和最大)
- 29. 微软面试题:求一个矩阵中最大的二维矩阵(元素和最大)
- 一个H行L列的二维矩阵数组(整形),求每行的元素总和,并输出最大的那一行的总和
- 【100题】三十五 求一个矩阵中最大的二维矩阵(元素和最大)
- 求一个矩阵中最大的二维矩阵(元素和最大)
- 算法习题35:求一个矩阵中最大的二维矩阵
- 求一个矩阵中最大的二维矩阵(元素和最大)
- 求一个矩阵中最大的二维矩阵(元素和最大)
- 求一个矩阵中最大的二维矩阵(元素和最大)
- 微软算法100道题------求一个矩阵中最大的二维矩阵(元素和最大)
- 求一个矩阵中最大的矩阵(元素和最大)(二维情况)
- 一个矩阵中最大的二维矩阵(元素和最大)
- 每日一道算法题:求一个矩阵中最大的二维矩阵(元素和最大)
- 【每日面试题】求一个矩阵中最大的二维矩阵(元素和最大)
- 100题求一个矩阵中最大的二维矩阵(元素和最大)
- 给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩阵称为最大子矩阵。
- 求一个矩阵中最大的二维矩阵(元素和最大)