zoukankan      html  css  js  c++  java
  • PTA1007

    思路

    1. 固定三个点,左节点,右节点和一个虚拟结点,记录下标,让虚拟结点不断往右跑,尺取法的思想

    2. DP,由于DP和尺取时间复杂度一样,这里就不放代码了

    注意

    特判全是负数的情况,如果全部元素都是负数,则输出 0 第一个元素值 最后一个元素值

    如果不在最后特判的话,如果全是负数则错误,比如:
    5
    -1 -1 -1 -1 -1
    就会输出错误答案:
    0 -1 -1

    AC代码

    #include<iostream>
    #include<algorithm>
    #include<map>
    #include<string.h>
    #include<stdio.h>
    #include<map>
    #include<vector>
    #include<queue>
    using namespace std;
    typedef long long ll;
    #define inf 0x3f3f3f3f;
    
    int a[10010];
    
    int main()
    {
        int n,cnt=0;
        cin>>n;
        for(int i=0;i<n;i++)
        {
            cin>>a[i];
            if(a[i]<0) cnt++;
        }
        if(cnt==n)
        {
            cout<<0<<" "<<a[0]<<" "<<a[n-1]<<endl;
            return 0;
        }
        int l=0,r=0,l1=0,sum=0,ma=a[0]; // ma=0 + 下面if语句两行掉一下顺序在pta会错一组数据,ma必须为a[0],下面if条件顺序必须这样写,否则其他地方需要变一下
        for(int i=0;i<n;i++)
        {
            sum+=a[i];
            if(sum>ma) ma=sum,l=l1,r=i; // 条件不是sun>=0 更新l、r
            if(sum<0) sum=0,l1=i+1; // 让l1先去往右跑
    //        if(sum>ma) ma=sum,l=l1,r=i; // 条件不是sun>=0 更新l、r
        }
        cout<<ma<<" "<<a[l]<<" "<<a[r]<<endl; // 输出最大值、左值、右值
        return 0;
    }
    
  • 相关阅读:
    【HDU 1060】Leftmost Digit
    【HLG 1572】表达式计算(后缀表达式+栈的应用)
    Vue CLI3 开启gzip压缩
    html元素呼吸效果
    前端实现在线预览pdf、word、xls、ppt等文件
    devServer proxy的使用
    7个基础js函数
    前端初中高级面试题1
    模仿头条导航的左右滚动效果
    angular基本入门教程
  • 原文地址:https://www.cnblogs.com/OFSHK/p/14432214.html
Copyright © 2011-2022 走看看