连续子数组的最大和与最小积

import java.util.Scanner;
/**
 * @program: entrance_exam
 * @description: 计算连续子向量的最大和和乘积最小的连续子数组(正数和负数)。
 * 如{6,-3,-2,7,-15,1,2,2}的连续子向量的最大和为8,最小乘积的连续子数组为6*(-3)*(-2)*7*(-15)*1*2*2
 * @author: TAO
 * @create: 2018-05-19 09:52
 **/
/**算法思想:设置一个最大值变量,依次进行加,若是比原来的最大值大,那么就是需要更新最大值,否则,一直加
 *          当加的值小于0时,就不需要进行累加。
 * */
public class Exercise5 {
    public static void main(String[] args) {
        System.out.printf("输入数组元素的个数");
        int n=0;
        Scanner scanner=new Scanner(System.in);
        n=scanner.nextInt();
        int []a=new int[n];
        System.out.println("输入元素");
        for(int i=0;i<n;i++)
            a[i]=scanner.nextInt();
        scanner.close();
        //int max=findMaxSubArr(a);
        int min=minProduct(a);
        System.out.println(min);
    }
    public static int findMaxSubArr(int []a){
        int sum=0,max=0;
        for(int i=0;i<a.length;i++){
            sum+=a[i];
            if(sum>max)
                max=sum;
            if(sum<0)
                sum=0;
        }
        return max;
    }
    public static int minProduct(int []nums){
        int min=1,mulitply=1;
        for(int i=0;i<nums.length;i++){
            mulitply*=nums[i];
            if(mulitply<min)
                min=mulitply;
        }
        return min;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值