OJ lintcode 最大子数组

作者: DayDayUpppppp | 来源:发表于2017-02-19 19:59 被阅读8次

给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。
注意事项
子数组最少包含一个数
您在真实的面试中是否遇到过这个题?
Yes
样例
给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6

class Solution {
public:
    /**
    * @param nums: A list of integers
    * @return: A integer indicate the sum of max subarray
    */

    // 注意这种情况是,数组中至少存在一个正数的情况
    int maxSubArray(vector<int> nums) {
        // write your code here
        int sum = 0;
        int max_sum = 0;
        int max_pos_begin = 0;
        int max_pos_end = 0;

        int begin = 0;
        int end = 0;
        int flag = 0;

        //考虑到全部都是负数的情况
        int neg_flag = 0;
        int max_neg = nums[0];
        int max_neg_index = 0;

        for (int i = 0; i < nums.size(); i++) {
            //flag 是一个标志,用来判断begin是否已经设置
            if (nums[i] > 0&&flag==0) {
                begin = i;
                flag = 1;
            }

            sum = sum + nums[i];

            if (sum < 0) {
                sum = 0;
                flag = 0;
            }

            if (sum > max_sum) {
                end = i;
                max_sum = sum;
                max_pos_begin = begin;
                max_pos_end = end;
            }

            if (nums[i] > 0) {
                //如果存在一个正数,neg_flag就设置为1
                neg_flag = 1;
            }
            else {
                if (nums[i] > max_neg) {
                    max_neg = nums[i];
                    max_neg_index = i;
                }
            }
        }

        if (neg_flag == 1) {
            return max_sum;
        }
        else {
            return max_neg;
        }
    
    }
};

相关文章

  • OJ lintcode 最大子数组

    给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。注意事项子数组最少包含一个数您在真实的面试中是否遇到过...

  • lintcode 最大子数组||

    给定一个整数数组,找出两个 不重叠 子数组使得它们的和最大。每个子数组的数字在数组中的位置应该是连续的。返回最大的...

  • lintcode 最大子数组|||

    给定一个整数数组和一个整数 k,找出 k 个不重叠子数组使得它们的和最大。每个子数组的数字在数组中的位置应该是连续...

  • lintcode 最大子数组

    给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。样例给出数组[−2,2,−3,4,−1,2,1,−5,...

  • 最大子数组

    最大子数组(lintcode 41) 描述:给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。样例:给出...

  • OJ lintcode 最小子数组

    给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。注意事项子数组最少包含一个数字您在真实的面试中是否遇到...

  • OJ lintcode 奇偶分割数组

    分割一个整数数组,使得奇数在前偶数在后。您在真实的面试中是否遇到过这个题?Yes样例给定 [1, 2, 3, 4]...

  • lintcode 最大子数组差

    给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大。...

  • OJ lintcode 两数组的交

    返回两个数组的交您在真实的面试中是否遇到过这个题?Yes样例nums1 = [1, 2, 2, 1], nums2...

  • LintCode 41. 最大子数组

    题目描述 给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。 子数组最少包含一个数。挑战:要求时间复杂度...

网友评论

    本文标题:OJ lintcode 最大子数组

    本文链接:https://www.haomeiwen.com/subject/caijwttx.html