虾皮:笔试第二题。连续数乘积最大,有0 负数 正数。

如何考虑??
有大佬路过的,能给个详细解说吗。膜拜到天亮。
#京东招聘##Shopee#
全部评论
力扣原题152,我也没全a,只有70%,少考虑了一个判定条件,寄了寄了
点赞 回复
分享
发布于 2022-03-07 21:03
LC152原题
点赞 回复
分享
发布于 2022-03-07 21:04
联易融
校招火热招聘中
官网直投
class Solution { public:     /**      * Note: 类名、方法名、参数名已经指定,请勿修改      *      *      * 找到数组中乘积最大的连续子数组,并返回乘积      * @param nums long长整型 vector 原始数组      * @return long长整型      */     long long GetSubArrayMaxProduct(vector<long> &nums) {         // write code here         int numsLen = nums.size();         long long mx, mi;         mx = 1;         mi = 0;         long long res = INT64_MIN;         for (int i = 0; i < numsLen; ++i) {             if (nums[i] > 0) {                 mx = mx * nums[i];                 mi = mi * nums[i];             } else if (nums[i] < 0) {                 if (mi == 0) {                     mi = nums[i] * mx;                     mx = 1;                 } else {                     mx = mi * nums[i];                     mi = mx * nums[i];                 }             } else {                 mx = 1;                 mi = 0;             }             res = max(mx, res);         }         return res;     } };
点赞 回复
分享
发布于 2022-03-07 21:04
动归 一个数组存当前最大值 一个数组存当前最小值 最大值乘负数有可能转为最小值 最小值乘负数可能转为最大值 反之…
点赞 回复
分享
发布于 2022-03-07 21:05
力扣152
点赞 回复
分享
发布于 2022-03-07 21:06
class Solution { public:     int maxProduct(vector<int>& nums) {         int n = nums.size();         int res = nums[0];         int maxk = nums[0], mink = nums[0];         for(int i = 1; i < n; i++)         {             int a = nums[i] * maxk, b = nums[i] * mink;             maxk = max(nums[i], max(a, b));             mink = min(nums[i], min(a, b));             //cout << maxk << mink << endl;             res = max(res, maxk);         }         return res;                       } };
点赞 回复
分享
发布于 2022-03-07 21:42
dp了
点赞 回复
分享
发布于 2022-03-27 16:42

相关推荐

1 2 评论
分享
牛客网
牛客企业服务