OJ lintcode 最大子数组

给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。
注意事项
子数组最少包含一个数
您在真实的面试中是否遇到过这个题?
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;
        }
    
    }
};

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目前的数字是对应的lintcode的题目序号 14.二分查找 给定一个排序的整数数组(升序)和一个要查找的整数t...
    mytac阅读 4,048评论 1 2
  • 给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。注意事项子数组最少包含一个数字您在真实的面试中是否遇到...
    DayDayUpppppp阅读 2,405评论 0 0
  • 3.10 69.给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 二叉树的层次遍历样例给一棵二叉树 {3...
    mytac阅读 4,738评论 3 3
  • 这瓶纯露瓶子不能二次利用,可惜呀!喷头巨好用,喷出来的细雾比我任何牌子的喷头都好用
    云自在v阅读 3,627评论 3 0
  • 有时候,我所表达的和我所想诉说的不是同一个意思,而我也无力辩解的时候,总是奢望你们刚才都没有听见,我却只能承认我嘴笨。
    af36d43a22e8阅读 897评论 0 0