work_1
Github的用户名为heiheitian
教科书:代码大全第2版
重构
一维最大子数组之和:
#include<stdio.h>
void MaxSumSonArrays(int a[],int length)
{
int sum=0,currentsum=0,i;//sum表示子数组和的最大值,currentsum表示当前子数组的和
int begin=0,end=0;
if(a==NULL||length<=0)
printf("Array Error!\n");//检测输入数组是否合法
for(i=0;i<length;i++)
{
if(currentsum<=0)
{
currentsum=a[i];
begin=i+1;
}
else
currentsum+=a[i];
if(currentsum>sum)
{
sum=currentsum;
end=i+1;
}
}
printf("sum=%d:\nfrom: %d to %d\n",sum,begin,end);
}
int main()
{
int length,i;
int a[10000]={0};
scanf("%d",&length);
for(i=0;i<length;i++)
scanf("%d",&a[i]);
MaxSumSonArrays(a,length);
return 0;
}
设计思路:
本题最基本的想法有求出数组所有子数组的和,然后选出最大的一个,假设数组长度为n,则其子数组共有n*(n+1)/2个,及时间复杂度为O(n*n),当数组数量很大时,显然不能满足要求。
本题还有一种巧妙的算法,即设置一个当前子数组和的变量currentsum和一个最大子数组和的变量sum,当currentsum的值小于0时,说明sum不应该包含这一段数据,则currentsum将下一个数据作为起始,否则currentsum继续添加下一个数据;在currentsum添加数据的过程中,sum始终保持currentsum改变过程中的最大值,这样遍历一遍数组即可求出最大子数组的和,时间复杂度为O(n),面对大数据时也可以顺利解决。
work_1的更多相关文章
- HDU5840 (分块+树链剖分)
Problem This world need more Zhu 题目大意 给一颗n个点的有点权的树,有m个询问,对于每个询问u,v,k,首先将点u到点v的最短路径上的所有点按顺序编号,u的编号为1, ...
- HDU4897 (树链剖分+线段树)
Problem Little Devil I (HDU4897) 题目大意 给定一棵树,每条边的颜色为黑或白,起始时均为白. 支持3种操作: 操作1:将a->b的路径中的所有边的颜色翻转. 操作 ...
- C++利用注册表添加桌面右键新建菜单
对于程序员来说,新建一个cpp文件是再频繁不过的事情了. 为了方便,我们习惯在桌面右键新建文件,而不是新建一个文本文档,然后修改后缀名. 百度谷歌查询了一下,终于知道如何添加注册表. 手痒,抽出时间用 ...
- 【CF39E】【博弈论】What Has Dirichlet Got to Do with That?
Description You all know the Dirichlet principle, the point of which is that if n boxes have no less ...
- day36-多进程多线程一
多进程 概念:进程是程序在计算机上的一次执行活动.当你运行一个程序,你就启动了一个进程.显然,程序是死的(静态的),进程是活的(动态的).进程可以分为系统进程和用户进程.凡是用于完成操作系统的各种功能 ...
- py-函数基础
定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 1.减少重复代码2.使程序变的可扩展3.使程序变得易维护 函数参数 形参变量 只有在被调 ...
- Python学习笔记 - day14 - Celery异步任务
Celery概述 关于celery的定义,首先来看官方网站: Celery(芹菜) 是一个简单.灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具. 简单来看,是一个基于pyt ...
- Day 19 函数之闭包、装饰器
一.什么是装饰器 器即函数 装饰即修饰,意指为其他函数添加新功能 装饰器定义:本质就是函数,功能是为其他函数添加新功能 二.装饰器遵循的原则 1.不修改被装饰函数的源代码(开放封闭原则) 2.为被装饰 ...
- AOP面向方面编程---postsharp
PostSharp是一个用于在.NET平台上实现AOP(Aspect-Oriented Programming,面向方面编程)的框架,现通过简单的示例代码来演示如何使用postsharp. 1.新建一 ...
随机推荐
- HDU 3038 How Many Answers Are Wrong 并查集带权路径压缩
思路跟 LA 6187 完全一样. 我是乍一看没反应过来这是个并查集,知道之后就好做了. d[i]代表节点 i 到根节点的距离,即每次的sum. #include <cstdio> #in ...
- 整理了一份招PHP高级工程师的面试题
1. 基本知识点 HTTP协议中几个状态码的含义:1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 100 (继续) 请求者应当继续提出请求. 服务器返回此代码 ...
- 在Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口(老罗学习笔记4)
在上两篇文章中,我们介绍了如何为Android系统的硬件编写驱动程序,包括如何在Linux内核空间实现内核驱动程序和在用户空间实现硬件抽象层接口.实现这两者的目的是为了向更上一层提供硬件访问接口,即为 ...
- NDK(17)让ndk支持完整C++,exception,rtti,
C++ Support The Android platform provides a very minimal C++ runtime support library (/system/lib/li ...
- Android下HelloWorld项目的R.java文件介绍
R.java文件介绍 HelloWorld工程中的R.java文件 package com.android.hellworld; public final class R { public s ...
- Failed to initialize monitor Thread: Unable to establish loopback connection解决方法
原因一: android中出现该异常的原因,是pid产生了冲突,将服务中的windows Firewall 服务停用就行了 原因二: http://stackoverflow.com/question ...
- 学军NOI训练13 T3 白黑树
唉,大学军有自己的OJ就是好,无限orz 只有周六的比赛是开放的囧,这场比赛最后因为虚拟机卡住没有及时提交…… 否则就能让大家看到我有多弱了…… 前两题题解写的很详细,可以自己去看,我来随便扯扯T3好 ...
- 利用序列化的方式实现C#深复制和浅复制
代码如下:具体看注释 [Serializable] public class A { public virtual string Name { get; set; } public int Age { ...
- 自定义ShareDialog视图
1. share_item.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayou ...
- LeetCode Binary Tree Preorder Traversal 先根遍历
题意:给一棵树,求其先根遍历的结果. 思路: (1)深搜法: /** * Definition for a binary tree node. * struct TreeNode { * int va ...