题解 | #连续子数组的最大乘积#

连续子数组的最大乘积

http://www.nowcoder.com/practice/fd8c819c07c9493887bfac8549c119f4

动态规划(C++)

这个时leecode的思路,可以看看。

alt

#include<iostream>
#include<vector>

#define INT_MAX 0x7fffffff
#define INT_MIN 0x80000000
using namespace std;

int maxMuti(vector<int> &arr,int nums){
    
    int GMax = arr[0];
    int GMin = arr[0];
    int max_n = INT_MIN;
    //(1)
    for(int i = 1;i < nums; i++){
        int mx = GMax, mn = GMin;
        GMax = max(mx * arr[i] , max(mn*arr[i] , arr[i]));
        GMin = min(mn * arr[i] , min(mx*arr[i] , arr[i]));
        max_n = max(GMax , max_n);
        //cout << GMax <<endl;
    }
    return max_n;
}

int main(){
    int nums;
    cin >> nums;
    vector<int> arr(nums);
    
    for(int i = 0;i < nums; i++){
        cin >> arr[i];
    }
    //(2)
    //这里是为了处理只有一个输入的情况。。。因为在(1)中遍历时会从第二个开始遍历,
    //所以边界问题得解决。
    cout << max(maxMuti(arr,nums),arr[0]) << endl;
    return 0;
}

全部评论
int max_n = INT_MIN;这里有问题,max_n也应该为arr[0],因为如果arr[0]最大的话,最终结果取不到arr[0]
1 回复 分享
发布于 2023-04-02 15:28 四川

相关推荐

02-10 21:39
Java
点赞 评论 收藏
分享
评论
10
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务