【编程之美】读书笔记:求数组的子数组之和的最大值

《编程之美》——读书笔记 最近花了几天时间把《编程之美》这本书好好读了一遍,感觉收获还是挺大的。 于是决定做个笔记,算是简单的摘录一些书中的精彩思想,也算重新回顾思考下   1.5 快速找出机器故障 问题描述: 有很多的ID(可能位数很大),其中只有一个ID出现的次数小于2,其他正常ID出现的次数都等于2,求这个次数为1的ID 精彩解法: 将所有的数从头到尾异或一遍,这样得出来的最终结果就是所求的答案。 拓 阅读详情
         问题:一个有N个整数元素的一维数组(A[0],A[1],A[2],...A[n-1]),这个数组中子数组之和的最大值是多少?

该子数组是连续的。例如 数组:[1,-2,3,5,-3,2]返回8; 数组:[0,-2,3,5,-1,2]返回9

        解法一:常规解法,时间复杂度为O(N^2)

       设Sum[i,...,j]为数组A中第i个元素到第j个元素的和(0<=i<=j<n),遍历所有的Sum[i,...,j],并且利用Sum[i,...,j]=Sum[i,....j-1]+A[j];

  int MaxSum(int *A,int n)
{
int maximum=-INF;
int sum;
for(int i=0;i<n;i++)
{
sum=0;
for(int j=i;j<n;j++)
{
sum+=A[j];
if(sum>maximum)
maximum=sum;
}
}
return maximum;
}

该算法的时间复杂度为O(N^2)

        解法二:采用二分策略(分治法),时间复杂度为(N*logN)。

       如果将所给数组(A[0],...,A[n-1])分为长度相等的两段数组(A[0],...,A[n/2-1])和(A[n/2],...,A[n-1]),分别求出这两段数组各自最大子段和,则原数组(A[0],...,A[n-1])的最大子段和分为以下三种情况:
          a.(A[0],...,A[n-1])的最大子段和与(A[0],...,A[n/2-1])的最大子段和相同;
          b.(A[0],...,A[n-1])的最大子段和与(A[n/2],...,A[n-1])的最大子段和相同;
          c.(A[0],...,A[n-1])的最大子段跨过其中间两个元素A[n/2-1]到A[n/2].
对应a和b两个问题是规模减半的两个相同的子问题,可以用递归求得。
对于c,需要找到以A[n/2-1]结尾的和最大的一段数组和S1=(A[i],...,A[n/2-1])和以A[n/2]开始和最大的一段和S2=(A[n/2],...,A[j]),那么第三种情况的最大值为S1+S2。
代码如下:
int MaxSum(const int A[],int Left,int Right)    
{    
    int MaxLeftSum,MaxRightSum;              //左、右部分最大连续子序列值。对应情况a、b      
    int MaxLeftBorderSum,MaxRightBorderSum;  //从中间分别到左右两侧的最大连续子序列值,对应c。      
    int LeftBorderSum,RightBorderSum;    
    int Center,i;    
    if(Left == Right) //只有一个元素   
        if(A[Left]>0)    
            return A[Left];    
        else    
            return 0;    
        Center=(Left+Right)/2;    
        MaxLeftSum=MaxSum(A,Left,Center);    
        MaxRightSum=MaxSum(A,Center+1,Right);    
        MaxLeftBorderSum=0;    
        LeftBorderSum=0;    
        for(i=Center;i>=Left;i--)    
        {    
            LeftBorderSum+=A[i];    
            if(LeftBorderSum>MaxLeftBorderSum)    
                MaxLeftBorderSum=LeftBorderSum;    
        }    
        MaxRightBorderSum=0;    
        RightBorderSum=0;    
        for(i=Center+1;i<=Right;i++)    
        {    
            RightBorderSum+=A[i];    
            if(RightBorderSum>MaxRightBorderSum)    
                MaxRightBorderSum=RightBorderSum;    
        }    
        int max1=MaxLeftSum>MaxRightSum?MaxLeftSum:MaxRightSum;    
        int max2=MaxLeftBorderSum+MaxRightBorderSum;    
        return max1>max2?max1:max2;    
}    

         解法三:动态规划法(时间复杂度为O(N))

         将一个大问题(N个元素数组)转换为一个较小的问题(n-1个元素数组)。假设result[0]为已经找到数组[0,1,...n-1]中子数组和最大的,即保存当前找到的最大子数组。sum[i]为包含第i个元素且和最大的连续子数组。对于数组中的第i+1个元素有两种选择:
a.作为新子数组的第一个元素
b.放入前面已经找到的最大的子数组sum[i-1]中。
int max(int x,int y)
  {
	  return (x>y)?x:y;
  }
int MaxSum(int * A,int n)
{
 int *sum=(int *)malloc(n*sizeof(int));
 int *result=(int *)malloc(n*sizeof(int));
  
  sum[0]=A[0];
  result[0]=A[0];
  for(int i=1;i<n;i++)
{
  sum[i]=max(A[i],A[i]+sum[i-1]);//若A[i]>A[i]+sum[i-1],则作为新子数组的第一个元素,否则放入前面已经找到的最大的子


数组sum[i-1]中
  result[i]=max(sum[i],result[i-1]);


}
return result[n-1];
}

注:前面的算法额外申请了sum和result数组,其实在递推式
sum[i]=max(A[i],A[i]+sum[i-1]);
result[i]=max(sum[i],result[i-1]);中只需要两个变量就可以了。所以只需O(1)的空间。
[掌握下面这个写法]
int MaxSum(int * A,int n)
{


  int sum=A[0];
  int result=A[0];
  for(int i=1;i<n;i++)
{
  sum=max(A[i],A[i]+sum);
  result=max(sum,result);


}
return result
}

简洁的写法(掌握):
 int MaxSum(int* a, int n)    
{    
    int sum=a[0];        
    int b=0;     


    for(int i=0; i<n; i++)    
    {    
        if(b<0)           ////     
            b=a[i]; //小于0,重新计算起点   
        else    
            b+=a[i];   //大于0,就想加 
        if(sum<b)    //保存最大的和 
            sum=b;    
    }    
    return sum;    
}    

【ComfyUI】Flux 完整版文生图 本文介绍了一个基于Flux Dev的AI文生图全流程工作流,通过整合扩散模型、文本编码器和VAE解码器等核心组件,实现从文本到高清图像的端到端生成。工作流包含模型加载、条件构建、潜空间采样、图像解码和成果保存五个关键环节,支持高分辨率图像的细节还原和艺术风格塑造。应用场景涵盖艺术创作、内容生产、教学演示和科研数据准备等领域,适用于对画质和提示遵循性要求严格的场景。文章还提供了相关开发资源和学习教程链接,帮助用户深入理解AI绘图机制和实际应用。 阅读详情

相关推荐

Qupath软件的安装与使用

Qupath软件的安装与使用软件安装软件下载软件安装【windows版】简单使用文件打开人工标注标注导出和导入 Qupath是一款开源的医学图像标注软件,适合放射影像及数字病理切片等的查看。同时,其自带的标注功能使得医生可以直接通过该软件进行病变区域的标注和分类。跟进一步的,该软件提供groovy脚本运行接口,可供操作者编写和运行脚本,将标注信息转换为xml或者json格式的数据进行进一步的后序处...

qq_40662074的博客 3万+

一个有 N个元素的整型数组,求该数组的各个子数组中,子数组之和的最大值是多少? 例如数组 a[6]={-2,5,3,-6,4,-8,6};则子数组之和的最大值是 8(即 a[1]+a[2])。

一个有 N个元素的整型数组,求该数组的各个子数组中,子数组之和的最大值是多少? 例如数组 a[6]={-2,5,3,-6,4,-8,6};则子数组之和的最大值是 8(即 a[1]+a[2])。 更多资料请点击:我的目录 #include <stdio.h> int i ,j , N,max; int main() { printf("请输入数组大小:"); scanf("%d"...

佳佳鸽的博客 4852

连续子数组和的最大值(编程之美错误分析)

输入一个N个元素的整型数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。 例如输入的数组为-9  -3  -2  2  -1  2  5  -7  1  5,和最大的子数组为2  -1  2  5。因此输出为该子数组的和8。 可是如果都是负数的话,要返回0?还是返回最小的负数?,这个数时候你要问问面试官(交流很重要)。 OK

彦祖老师 2667

HDI盲埋孔设计规范:高速PCB信号完整性落地指南

盲埋孔是高密度互连(HDI)PCB实现高速信号完整性的关键技术,其本质是通过控制过孔stub长度、优化回流路径和提升布线密度,解决GHz级信号在传统通孔结构下出现的谐振、串扰与EMI超标问题。其设计核心在于叠层物理约束、电气参数建模与工艺能力协同,涉及stub长度计算、反焊盘尺寸推导、孔壁粗糙度Rz控制等关键指标。广泛应用于DDR4、PCIe Gen4、USB3.2等高速接口的PCB设计中,尤其在车载ADAS、5G基站及FPGA载板等对SI/PI要求严苛的场景中成为刚性门槛。

weixin_34416754的博客 436

华为产品安全基线

一、敏感信息安全传输 1、采用HTTPS安全协议传输 2、客户端本地保存的敏感信息,需要先加密再保存使用,不可逆支持PBKDF2(迭代10000次)加密保存,可逆支持AES256+IV保存,密钥支持可更新 二、认证鉴权 1、License中心与分析节点分布式部署,需要做用户名+口令安全认证,支持使用HTTPS安全协议。 2、客户端登录支持防暴力破解,支持验证码,多次连续尝试登陆失败后锁定账...

zileixu的博客 1万+

最大子数组之和

一个含有n个元素的整数数组,数组元素可以是正数也可以是负数,数组中连续的一个或多个元素称为改数组的子数组,子数组所有元素之和称为子数组和,求一个整数数组子数组和的最大值。本文分别采用了四种方法求解:蛮力法、改进的蛮力法、动态规划和改进的动态规划,最后总结动态规划算法思想。

不喝咖啡的程序猿 2020

Cadence SIP Layout 简单教程-第二章

[从whp1920 网易博客迁移至优快云] 第一章在正式布线之前做了必须做的准备工作,下面进入正题,打开Candence SIP RF Layout GXL软件。 第一节 导入外形尺寸 打开SIP设置文件保存路径,如下图所示进入导入DXF页面,选中前一章时画好的外框图。打开导入界面后,再进入DXF In Edit/View Layers界面选择所有层,导入Class选择DRAWING FOR...

whp1920的博客 6939

求数组的子数组之和的最大值

1.问题描述一个有N个整数元素的一维数组( A[0], A[1], … , A[n-2], A[n-1]),子数组之和的最大值是什么?(要求子数组的元素是连续的)在这里要注意,是数组的子数组而不是集合的子集例子:有数组( -2, 5, 3, -6, 4, -8, 6),则其子数组之和的最大值为8,其对应的数组为(5,3)2.分析与解法解法一:采用直接法,记Sum[i…j],为数组A中从第i到第j之间

踏雪博客 1804

迅投miniQMT量化交易之【网格交易】的实现(25)——写在最后

和大家一起分享如何使用miniQMT实现我们自己的网格交易系统。如果您对量化交易感兴趣,欢迎一起交流。

tzzqn2008的专栏 829

2、硬件工程师笔试面试汇总(2025版本)

本文摘要:文章系统梳理了硬件工程师笔试面试中的电子元器件知识要点,涵盖电阻、电容、电感、二极管、三极管、MOS管等器件的工作原理、选型要点和应用场景。详细解析了UART、I2C、SPI等通信协议的特点及实现方式,并探讨了电源管理、信号处理、PCB设计等核心问题。针对常见电路如放大电路、滤波电路、逻辑电路等提供了深入分析,同时介绍了示波器使用、单片机系统设计等实用技能。文章还包含器件封装、电平转换、时序分析等工程实践内容,并附有相关真题解析和仿真实验指导,为硬件工程师提供全面的技术参考。

XU157303764的博客 9004

一个有N个元素的整型数组,求该数组的各个子 数组中,子数组之和的最大值是多少?

一个有N个元素的整型数组,求该数组的各个子 数组中,子数组之和的最大值是多少?

qq_54075859的博客 813

2025秋招LLM大模型多模态面试题(八)- langchain完整面试题

1. **什么是 LangChain** 2. **LangChain 包含哪些核心模块** - 模型输入/输出(Model I/O) - 组件管理 - 数据处理 - 链式组合 - 记忆与上下文管理 - 外部集成 3. **一些核心概念** 4. **什么是 LangChain Agent?** 5. **什么是 LangChain model?** 6. **LangChain 包含哪些特点?** 7. **LangChain 如何使用?** - LangChai

weixin_41496173的博客 2192

编程之美读书笔记2.14—求数组的子数组之和的最大值

1.最直接的方法,时间复杂度为O(N^2) 2.时间复杂度为O(N)。不断的累加每个数组元素,并用一个变量保存当前的最大值,累加的过程一直和该变量进行比对,如果大于最大值,就把当前的最大值保存下来,反复如此就可以求出最大值. #include using namespace std; int MaxSum1(int *A,int n) { int maxSum=0; int sum;

yuhan_9204的专栏 489

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

C语言减半递推法求数组最大值,【编程之美】读书笔记:求数组的子数组之和的最大值...

问题:一个有N个整数元素的一维数组(A[0],A[1],A[2],...A[n-1]),这个数组中子数组之和的最大值是多少?该子数组是连续的。例如 数组:[1,-2,3,5,-3,2]返回8;数组:[0,-2,3,5,-1,2]返回9解法一:常规解法,时间复杂度为O(N^2)设Sum[i,...,j]为数组A中第i个元素到第j个元素的和(0<=i<=j利用Sum[i,...,j]=Su...

weixin_39892019的博客 702

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

读书笔记之编程之美 - 2.14 求数组的子数组之和的最大值

第一次遇到这个题是在Autodesk的笔试题,由于笔试时间比较短,当时只写了个大概思路。 当时我的想法是正负数问题,先从前扫描,把数组的值都加起来,如果某时的sum为负数,则可以丢弃之前的数据,从新开始计算。另外还要从后面进行计算,遇到sum为负数也要进行数据截断。现在看这个解法有个问题,就是数组全为负数的时候,找不到答案,还要补充一步,寻找最大的那个负数。 再看书上的解法,直接看代码清单2-27,nStart = max(A[i], nStart + A[i]),这句的意思就是判断数组后面的结果是否可

山高月小 840

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

[读书笔记]编程之美(二)

[读书笔记]编程之美(二)2.1求二进制数中1的个数 问题:对于一个字节(8bit)的无符号整形变量,求其二进制表示中“1”的个数,要求算法的执行效率尽可能高。 思路: n = n & (n-1);当然因为只有8bit所以直接定义一个256的int数组表,直接返回结果,时间复杂度是O(1)。2.2不要被阶乘吓到 问题:1.给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=362

xy_cpp的博客 569

编程之美读书笔记2.15 - 子数组之和的最大值(二维)

http://blog.youkuaiyun.com/pipisorry/article/details/39083073 问题: 求二维数组(矩阵)的子矩阵之和的最大值。 亦可见:http://poj.org/problem?id=1050 解法1:(解释见注释) 每个子矩阵由列...

chuange6363的博客 106

编程之美读书笔记2.14 - 子数组之和的最大值

问题: 1. 一个由N个整数元素的一维数组,求其所有子数组中元素和的最大值。 2. 如果数组首尾相邻,也就是允许子数组A[i],...,A[n-1],A[0],...,A[j]存在,求其所有子数组总元素和的最大值。 解法1: /* O(n^2) 遍历算法 */ static int maxSubarraySum1(int *a,int a_len){ int max_su

皮皮blog 2010

编程之美读书笔记之求数组的子数组的最大乘积

/************************** *程序员:刘晋勋 *日期:2010/04/21 *功能:求子数组的最大乘积 *目的:编程练习**************************/#include#include#includelong MaxProOfSubArray(int arr[],int size){ long res =

521

《编程之美》读书笔记

《编程之美》读书笔记(一):中国象棋将帅问题  (http://www.cnblogs.com/bvbook/archive/2008/07/24/1250507.html)  《编程之美》读书笔记(二):“求二进制数中1的个数”扩展问题  (http://www.cnblogs.com/bvbook/archive/2008/07/24/1250535.html)  《编程之美》读书笔记

llw01的专栏 998

编程之美读书笔记2.15—子数组之和的最大值

解法1:枚举每一个矩形区域,然后再求这个矩形区域中元素的和

yuhan_9204的专栏 489

《编程之美》读书笔记集锦

《编程之美》读书笔记(一):中国象棋将帅问题 http://www.cnblogs.com/bvbook/archive/2008/07/24/1250507.html《编程之美》读书笔记(二):“求二进制数中1的个数”扩展问题 http://www.cnblogs.com/bvbook/archive/2008/07/24/1250535.html《编程之美》读书笔记(三): 一摞烙

linxhpku的专栏 692

读书笔记之编程之美 - 2.15 子数组之和的最大值(二维)

把前一个问题扩展了一下,寻找二维数组中,从(x1, y1)到(x2, y2)确定的矩形区域的数据之和最大值。 解法一给出了一个技巧,建立一个和原数组一样大的数组,用来保存(0, 0)到(x, y)的和,即P[x][y] = sum(x[0][0] –> x[x][y])。然后用Sum = PS[i_max][j_max]  - PS[i_min - 1][j_max] – PS[i_max][j_min - 1] + PS[i_min - 1][i_min -1]。不知道书上为什么要让数组从1开始,然后把

山高月小 1123
上一篇: 【编程之美】读书笔记:寻找最大的K个数
下一篇: 【编程之美】读书笔记:从无头单链表中删除结点
xiaoding133
博客等级 码龄19年 415粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值