《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 ...
随机推荐
- 笨办法学Python(二十一)
习题 21: 函数可以返回东西 你已经学过使用 = 给变量命名,以及将变量定义为某个数字或者字符串.接下来我们将让你见证更多奇迹.我们要演示给你的是如何使用 = 以及一个新的 Python 词汇ret ...
- CRM WebClient UI和Hybris里工作中心跳转的url生成逻辑
CRM WebClient UI 把Work center的navigation target在client side不可见:在Chrome development tool里看不到,而是点击了Wor ...
- Locust的官网及安装
Locust官网: https://docs.locust.io/en/latest/installation.html for Python 3: $ python3 -m pip install ...
- R cannot be resolved的几种可能 R not generated
项目又爆红了,Eclipse真是够操心,顺便看一下R cannot be resolved的几种可能 这次是SVN合并的问题 2015-12-24 主要看 Console 输出的问题位置即可,一般都是 ...
- 2018.7.30 Oracle的Blog数据库类型读取和存
package com.lanqiao.shopping.test; import java.io.BufferedInputStream; import java.io.BufferedOutput ...
- arXiv 上传文章过程
arXiv属于预印本服务的一种,是指科研工作者的研究成果还未在正式出版物上发表,而出于和同行交流目的自愿先在学术会议上或通过互联网发布的科研论文.科技报告等文章.与刊物发表的文章以及网页发布的文章 ...
- 第41章 RS-485通讯实验—零死角玩转STM32-F429系列
第41章 RS-485通讯实验 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...
- Python2.x 和 3.x 的区别
Python有两个版本,2.x 和 3.x ,两个版本不兼容,3.x 不不考虑对2.x代码的向后兼容. 在3.x中,一些语法,内建函数和对象的行为都有所调整. 大部分的python库都支持 pytho ...
- 微信 php 获取token 第二次失败解决办法
第一次成功了,第二次总是失败,很简单,session问题 clearstatcache(); $_SESSION = ''; $_COOKIE = ''; //获得参数 signature nonce ...
- C#基础-异常处理与自定义异常
异常处理 static void Main(string[] args) { Console.WriteLine("请输入一个数字:"); try { // 监测可能出现异常代码 ...