输入序列并求乘积最大连续子数列

img


输入n个元素组成的序列,找出乘积最大的连续子数列,若最大值不是正数则输出–1

基于Monster 组和GPT的调写:


#include <stdio.h>

int maxProduct(int arr[], int n) {
    int max_product = arr[0];
    int min_product = arr[0];
    int result = arr[0];
    
    for (int i = 1; i < n; i++) {
        if (arr[i] < 0) {
            // 交换最大值和最小值
            int temp = max_product;
            max_product = min_product;
            min_product = temp;
        }
        
        max_product = (arr[i] > max_product * arr[i]) ? arr[i] : max_product * arr[i];
        min_product = (arr[i] < min_product * arr[i]) ? arr[i] : min_product * arr[i];
        
        result = (max_product > result) ? max_product : result;
    }
    
    return (result < 0) ? -1 : result;
}

int main() {
    int n;
    scanf("%d", &n);
    
    int arr[n];
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }
    
    int max_product = maxProduct(arr, n);
    printf("%d\n", max_product);
    
    return 0;
}

题目给出的数据这么小,直接用DFS解决就行了,每一个数都有选或者不选两个状态