• 17-求连续数组和最大的序列


    /* 题目内容:

    给定长度为n的整数序列,a[1...n], 求[1,n]某个子区间[i , j]使得a[i]+…+a[j]和最大.或者求出最大的这个和.例如(-2,11,-4,13,-5,2)的最大子段和为20,所求子区间为[2,4].

    输入描述

    第一行为一个整数n,表示数组有n个数据,第二行依次输入n个整数

    输出描述

    计算出n个整数中连续k个数的最大和的那个k个连续的数

    输入样例


    输出样例


    */

    思路: 原始数组a[], 辅助数组b[], b[i]记录了以a[i]为终点的最大字段和,maxs = max{b[0], b[1], b[2] .....};

    if(b[i-1] > 0 , b[i] = a[i] + b[i -1];

    可以根据b来构造最大和字段,从计算b[i]的递推关系可以看出,如果b[i]是最大字段和,则a[i]是字段的最后一个元素,从a[i]往前的第一个满足b[i] = a[i]的元素就是 字段和的首元素。
    //借鉴前一题
    #include <iostream>
    using namespace std;
    int a[10000];
    int f[10000];

    int main(){
        int n;
        cin >> n;
        for(int i = 0; i < n; i++)
            cin >> a[i];
        f[0] = a[0];
        int max = a[0];
        for(int i = 1; i < n; i++){
            if(f[i - 1] > 0)
                f[i] = f[i - 1] + a[i];
            else
                f[i] = a[i];
            if(max < f[i])
                max = f[i];
        }
        int x = 0, y = 0, flagx = 1;
        for(int i = n - 1; i >= 0; i--){
            if(max == f[i] && flagx){
                x = i;
                flagx = 0;
            }
            y = x;
            if(f[i] < 0)
            {    y = i + 1;
                break;
            }
        }
    //    cout << y << " " << x << endl;
        for(int i = y; i <= x; i++)
            cout << a[i] << " ";
        return 0;
    }

    #include <iostream>
    using namespace std;
    
    int main(){
    	int n = 0, a[100] = {0}, b[100] = {0};
    	int max = -111111111, xmax = 0, ymax = 0;
    	cin >> n;
    	for(int i = 1; i <= n; i++){
    		cin >> a[i];
    		if(b[i - 1] > 0)
    			b[i] = a[i] + b[i - 1];    // b[i]记录以a[i]为终点的最大字段和 
    		else
    			b[i] = a[i];
    		if(max < b[i]){
    			max = b[i];              
    			xmax = i;	               //记录最大字段和的结束位置 
    		}
    	}
    	for(int i = xmax; i >= 1; i--){   //记录最大字段和的开始位置 
    		if(a[i] == b[i]){
    			ymax = i;
    			break;
    		}
    	}
    	cout << max << endl;
    	cout << ymax << " " << xmax << endl;
    	return 0;
    }
    
  • 相关阅读:
    SQL server使用
    NCC 事务
    springboot学习
    容器
    x86汇编
    git之.gitignore文件用途
    Linux系统安装之U盘引导
    使用异步I/O大大提高应用程序的性能
    Python3.5 用 pip 安装lxml时出现 “Unable to find vcvarsall.bat ”?(转载)
    python之正则表达式
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/7429749.html
Copyright © 2020-2023  润新知