返回一个整型数组中最大子数组的和(02)

组员:刘伟 http://www.cnblogs.com/Lw-1573/p/5323542.html

1.要求:

输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
如果数组A[0]……A[j-1]首尾相邻,允许A[i-1],…… A[n-1],A[0]……A[j-1]之和最大。
同时返回最大子数组的位置。
求所有子数组的和的最大值。

2分析:

这个题目是在上个题目的基础的加上数组首位相连,并该数组最大子数组的和,实现方法就是把环变成直线的方法,在输入数组的时候把数组扩充一倍,然后求以每个数作为开始的,长度为n的,最大子数组的值,就可以得到结果

3代码:

 1 #include<iostream>
 2 #include<time.h>
 3 #include<stdlib.h>
 4 #define N 100000
 5 using namespace std;
 6 int main()
 7 {
 8     int a[N];
 9     int start,end,i, sum,max,m,n;
10      cout<<"请输入个数:";
11      cin>>n;
12      m=n;
13      cout<<"请输入数组:";
14     for( i=0;i<n;i++)
15     {
16         cin>>a[i];
17         a[i+n]=a[i];
18     }
19     max=a[0];
20     start=0;
21     end=0;
22     for(int j=0;j<n;j++)
23     {
24         sum=0;
25         for(int k=j;k<n+j;k++)
26         {
27             sum=sum+a[k];
28             if(sum>max)
29             {
30                 max=sum;
31                 start=j+1;
32                 end=k+1;
33             }
34         }
35     }
36     cout<<"最大子数组的值为:"<<" "<<max<<endl;
37     cout<<"开始于第"<<start<<"个数"<<"    "<<"结束在第"<<end%n<<"个数"<<endl;
38     cout<<"这个子数组为:";
39     for(int c=0;c<end-start+1;c++)
40     {
41         cout<<a[start+c-1]<<"  ";
42     }
43 }

4截图:

5项目计划总结:

日期&&任务 听课 编写程序 阅读相关书籍 网上查找资料 日总计
周一 100 70   15 195
周二   40 45   95
周三   50 45 35 120
周四 100 40 40   180
周五   90   15 105
周六     40 15 65
周日     45   45
周总

6时间记录日志:

日期 开始时间 结束时间 中断时间 净时间 活动 备注
3/21 14:00 15:50 10 100 听课 软件工程上课
  21:00 21:25   20 阅读书籍  《构建之法》
3/22 14:00 17:00 10 110 编程 编写作业
  18:00 22:00 10 110 看书 《构建之法》
3/23 21:00 21:30   30 编程 编写老师布置的作业
3/23 14:00 15:50 10 100 听课 软件工程上课
3/24 16:00 18:00   120 编程 编写作业
3/25 9:00 9:30   30 看书 《构建之法》 《人月神话》
3/26 9:00 9:30   30 看书 《构建之法》

7缺陷记录日志:

日期 编号 类型 引入阶段 排除阶段 修复时间 修复缺陷
3月26日 1   编码 编码 10min

在环变链的时候出现了错误,最后用循环和拓展数组解决

时间: 2024-10-13 17:59:28

返回一个整型数组中最大子数组的和(02)的相关文章

返回一个整型数组中最大子数组的和

组员:刘伟 http://www.cnblogs.com/Lw-1573/p/5323542.html 1.题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 2.设计思想: 本题目最大的难点是如何找出子数组并且时间复杂度为O(n):我的思路是:从总左边(a[0])开始遍历整个数组,一直到最右边结束(a[n-1]),在这个过程中记录到目前

面试题:一个整型数组中各元素排列组合得到的最大的一个数 ,比如,1,3,9,11,23,233,911 要得到:9,911,3,233,23,11,1

package com.alibaba.interview; import java.util.Random; /** * @Author: weblee * @Email: [email protected] * @Blog: http://www.cnblogs.com/lkzf/ * @Time: 2014年10月25日下午2:58:39 * ************* function description *************** *一个整型数组中各元素排列组合得到的最大的一个

使用一个函数找出一个整型数组中的最大值和最小值

/***************************************************** 知识点:bool类型,命名空间,输入输出 题目要求: 使用一个函数找出一个整型数组中的最大值和最小值 *****************************************************/ #include<stdlib.h> #include<iostream> using namespace std; namespace CJJ // 定义命名空间

返回一个二维整数组中最大子数组的和

题目:返回一个二维整数组中最大子数组的和 实验思路 根据老师上课给出的3*6的数据 我们决定设计一个3*6行的二维数组进行计算,依次进行比较 将最大子数组的和返回 代码 1 #include <iostream.h> 2 int main() 3 { 4 int a[3][6];//定义一个3*6的二维数组 5 int max; 6 int s;//求和 7 int count; 8 int b[3][7]; 9 cout<<"请输入二维数组(3*6)中的元素:"

华为机试—整型数组中出现次数最多的元素

取出整型数组中出现次数最多的元素,并按照升序排列返回. 要求实现方法: public static int[] calcTimes(int[] num, int len); [输入] num:整型数组: len :输入的整数个数 [返回] 按照升序排列返回整型数组中出现次数最多的元素 [注意]只需要完成该函数功能算法,中间不需要有任何IO的输入输出 示例 输入:num = {1,1,3,4,4,4,9,9,9,10} len = 10 返回:{4,9} #include <iostream>

逻辑题(一)一个整型数组里除了两个数字之外,其他的数字都出现了两次,请写程序找出这两个只出现一次的数字。

package test; import java.util.*; public class test17 { public static void main(String[] args) { //一个整型数组里除了两个数字之外,其他的数字都出现了两次. // 请写程序找出这两个只出现一次的数字. int[] ints = {1,1,2,5,5,6,3,3}; Map<Integer, Integer> map = new HashMap<Integer, Integer>();

一个整型数组里除了两个不同数字之外,其它的数字都出现了两次。请写程序找出这两个只出现一次的数字。

曾经做过一道水题找出除了一个数字之外,其他数字都有2个.直接异或 最后结果就是那个数. 现在变成存在2个不一样的数字,假设成x,y,那么可以O(n)求出x^y,因为x,y不同,所以异或的结果不为0,看成2进制数,那么找到第一位为1 的位置,将这个位置设置为划分点,数组里所有这个位置为1 的异或一次,所有为0的再异或一次,最终求出的两个即为两个独特的数字. #include <stdio.h> #include <string.h> #include <algorithm>

剑指Offer(Java版)第四十五题:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

/*一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. */ import java.util.*; public class Class45 { public void FindNumsAppearOnce(int[] array, int num1[], int num2[]){ ArrayList<Integer> list = new ArrayList<Integer>(); Arrays.sort(array); for(int

课堂练习求环整数组中最大子数组之和

设计思路:之前还有一个课堂练习,是用户输入一个整数组,求其中最大子数组之和,我借鉴的其他同学的代码,仅在此基础上修改的.运用try,catch使得用户不必在输入数组之前输入数组的长度,但是需要一个除整数以外的数来结尾.一共使用了3个循环,运用一个循环得出每个数组中最大子数组之和的最大值,一个是用来计算最大子数组之和,最后一个用来实现数组的前移.第一个循环中包着另外两个循环.总的来说,是在之前课堂练习的基础上增加了将一个数组中的每个数做一次最前面的数,从中求出最大值. 程序代码: 1 import