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

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;
    }
}

猜你喜欢

转载自blog.csdn.net/sir_TI/article/details/80372248