《Cracking the Coding Interview》——第18章:难题——题目12
2014-04-29 04:36
题目:最大子数组和的二位扩展:最大子矩阵和。
解法:一个维度上进行枚举,复杂度O(n^2);另一个维度执行最大子数组和算法,复杂度O(n)。总体时间复杂度为O(n^3),还需要O(n)额外空间。
代码:
// 18.12 Given an n x n matrix, find the submatrix with largest sum. Return the sum as the result.
#include <algorithm>
#include <climits>
#include <iostream>
#include <vector>
using namespace std; class Solution {
public:
int largestSubmatrixSum (const vector<vector<int> > &matrix) {
n = matrix.size();
if (n == ) {
return ;
}
m = matrix[].size();
if (m == ) {
return ;
} int i, j, k;
vector<int> v;
int msum;
int sum; v.resize(m);
msum = INT_MIN;
for (i = ; i < n; ++i) {
fill(v.begin(), v.end(), );
for (j = i; j < n; ++j) {
for (k = ; k < m; ++k) {
v[k] += matrix[j][k];
}
sum = maxSubarraySum(v, m);
msum = max(msum, sum);
}
}
v.clear();
return msum;
};
private:
int n, m; int maxSubarraySum(const vector<int> &v, int n) {
int msum;
int sum;
int i; msum = INT_MIN;
for (i = ; i < n; ++i) {
if (v[i] >= ) {
msum = max(msum, v[i]);
break;
}
}
if (i == n) {
return msum;
} msum = sum = ;
for (i = ; i < n; ++i) {
sum += v[i];
msum = max(msum, sum);
sum = max(sum, );
} return msum;
};
}; int main()
{
int i, j;
int n, m;
vector<vector<int> > matrix;
Solution sol; while (cin >> n >> m && (n > && m > )) {
matrix.resize(n);
for (i = ; i < n; ++i) {
matrix[i].resize(m);
for (j = ; j < m; ++j) {
cin >> matrix[i][j];
}
}
cout << sol.largestSubmatrixSum(matrix) << endl; for (i = ; i < n; ++i) {
matrix[i].clear();
}
matrix.clear();
} return ;
}
《Cracking the Coding Interview》——第18章:难题——题目12的更多相关文章
- Cracking the coding interview 第一章问题及解答
Cracking the coding interview 第一章问题及解答 不管是不是要挪地方,面试题具有很好的联系代码总用,参加新工作的半年里,做的大多是探索性的工作,反而代码写得少了,不高兴,最 ...
- 《Cracking the Coding Interview》读书笔记
<Cracking the Coding Interview>是适合硅谷技术面试的一本面试指南,因为题目分类清晰,风格比较靠谱,所以广受推崇. 以下是我的读书笔记,基本都是每章的课后习题解 ...
- Cracking the coding interview
写在开头 最近忙于论文的开题等工作,还有阿里的实习笔试,被虐的还行,说还行是因为自己的水平或者说是自己准备的还没有达到他们所需要人才的水平,所以就想找一本面试的书<Cracking the co ...
- Cracking the coding interview目录及资料收集
前言 <Cracking the coding interview>是一本被许多人极力推荐的程序员面试书籍, 详情可见:http://www.careercup.com/book. 第六版 ...
- Cracking the Coding Interview(Trees and Graphs)
Cracking the Coding Interview(Trees and Graphs) 树和图的训练平时相对很少,还是要加强训练一些树和图的基础算法.自己对树节点的设计应该不是很合理,多多少少 ...
- Cracking the Coding Interview(Stacks and Queues)
Cracking the Coding Interview(Stacks and Queues) 1.Describe how you could use a single array to impl ...
- 二刷Cracking the Coding Interview(CC150第五版)
第18章---高度难题 1,-------另类加法.实现加法. 另类加法 参与人数:327时间限制:3秒空间限制:32768K 算法知识视频讲解 题目描述 请编写一个函数,将两个数字相加.不得使用+或 ...
- cracking the coding interview系列C#实现
原版内容转自:CTCI面试系列——谷歌面试官经典作品 | 快课网 此系列为C#实现版本 谷歌面试官经典作品(CTCI)目录 1.1 判断一个字符串中的字符是否唯一 1.2 字符串翻转 1.3 去除 ...
- 《Cracking the Coding Interview》——第18章:难题——题目13
2014-04-29 04:40 题目:给定一个字母组成的矩阵,和一个包含一堆单词的词典.请从矩阵中找出一个最大的子矩阵,使得从左到右每一行,从上到下每一列组成的单词都包含在词典中. 解法:O(n^3 ...
随机推荐
- Illegal access:this web application instance has been stopped already
七月 23, 2014 2:34:35 下午 org.apache.catalina.loader.WebappClassLoader loadClass信息: Illegal access: thi ...
- CentOS7 设置开机自启
[root@master-1 ~]# systemctl enable mariadb ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/sy ...
- border-radius给元素加圆角边框
border-radius给元素加圆角边框 例: border-radius:20px; /*所有角都使用半径为20px的圆角*/ 实心圆: 把宽度(width)与高度(height)值设置为一致(也 ...
- 剑指offer 33 把数组排成最小的数
错误代码 class Solution { public: int FindGreatestSumOfSubArray(vector<int> array) { int length = ...
- failed to bind pixmap to texture
问题描述:我用的是Ubuntue的操作系统,终端突然挂了.我重启了一下电脑,就进不去系统了. 日志信息: failed to bind pixmap to texture 原因: 界面管理工具坏了, ...
- Error:linker command failed with exit code 1 (use -v to see invocation) - iOS
今天在操作 CoreData 时,创建完 Create NSManagedObject Subclass... 后,工程中会自动生成四个文件,如下图所示: 此时此刻便以工程,激动人心的时刻来临了 ...
- [转]C++ explicit的作用
explicit作用: 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换. explicit使用注意事项: * e ...
- flask实现基于elasticsearch的关键词搜索建议
1.实现效果 2.fuzzy模糊查询和suggest查询 fuzzy模糊查询 GET chaxun/job/_search { "query": { "fuzzy&quo ...
- js字符转数字
js字符串转数字 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只 ...
- linux定时任务及练习
第1章 定时任务 1.1 什么是定时任务 相当于闹钟每天叫你起床 设定一个时间去做某件事 1.2 系统定时任务 [root@zeq ~]# ll -d /etc/cron* drwxr-xr-x. 2 ...