1. 程式人生 > >連續子陣列的最大和與最小積

連續子陣列的最大和與最小積

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