• 21-数组


    题目1 : 循环数组

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    给定包含N个整数的数组A1, A2, ... AN,你可以选择任意一个Ai,将Ai旋转到数组第一项,即将数组变成:

    Ai, Ai+1, Ai+2, ... AN, A1, A2, ..., Ai-1  

    现在小Hi希望旋转之后的数组满足:

    对于任意K(1 ≤ i ≤ N),前K项的和都是正数。  

    例如对于A=[3, -5, 2, -2, 3, 0],旋转成[3, 0, 3, -5, 2, -2]满足条件。  

    请你输出i,代表将Ai旋转到第一项满足条件。  

    如果有多解,你可以输出任意一个i。如果无解输出-1。

    输入

    第一行包含一个整数N。  

    第二行包含N个整数A1, A2, ... AN。  

    对于50%的数据,1 ≤ N ≤ 1000  

    对于100%的数据,1 ≤ N ≤ 100000, -1000000 ≤ Ai ≤ 1000000

    输出

    一个整数表示答案。

    样例输入
    6  
    3 -5 2 -2 3 0
    样例输出
    5
    //题目就是讲一个数组分为两段,让你决定后面一段的长度,并将他移到前一段的前面
    //考虑要保证和为正数,故使得后一段的和最大即可,最大就说明了从后面往前数,就算有负数,最终最大也说明
    //他是先减去小的,在加上大的,对于最终大的再前故可以保证sum>=0 
    
    #include <bits/stdc++.h>
    using namespace std;
    int a[100003];
    
    int main(){
    	int n, sum = 0;
    	scanf("%d", &n);
    	for(int i = 0; i < n; i++){
    		scanf("%d", &a[i]);
    		sum += a[i];
    	} 
    	if(sum <= 0){
    		printf("-1"); 
    		return 0;
    	}
    	sum = 0;
    	int max_sum = -0x3f3f3f3f, max_i = -1;
    	for(int i = n - 1; i >= 0; i--){
    		sum += a[i];
    		if(sum > max_sum){
    			max_sum = sum;
    			max_i = i;
    		} 
    	}
    	printf("%d", max_i + 1);
    	return 0;
    } 
     
    

      

     
  • 相关阅读:
    Delphi XE4 FireMonkey 开发 IOS APP 发布到 AppStore 最后一步.
    Native iOS Control Delphi XE4
    Delphi XE4 iAD Framework 支持.
    using IOS API with Delphi XE4
    GoF23种设计模式之行为型模式之命令模式
    Android青翼蝠王之ContentProvider
    Android白眉鹰王之BroadcastReceiver
    Android倚天剑之Notification之亮剑IOS
    Android紫衫龙王之Activity
    GoF23种设计模式之行为型模式之访问者模式
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/8545280.html
Copyright © 2020-2023  润新知