king-lxt / LeetCode-javasctipt

leetCode 答案
0 stars 0 forks source link

最大子序和的开始和结束的下标 #15

Open king-lxt opened 3 years ago

king-lxt commented 3 years ago

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和的开始和结束的下标。

示例 1:

输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。 示例 2:

输入:nums = [1] 输出:1 示例 3:

输入:nums = [0] 输出:0 示例 4:

输入:nums = [-1] 输出:-1 示例 5:

输入:nums = [-100000] 输出:-100000

king-lxt commented 3 years ago
const maxSumOfSubArray = function (nums) {
            if (nums == null || nums.length == 0) return {};
            // 1. 更新最大值时,需记录开始下标
            let max = 0, start = 0, end = 0, cur = 0;
            for (let i = 0, j = 0; i < nums.length; ++i) {
                if (cur <= 0) {
                    cur = nums[i];
                    j = i;
                } else {
                    cur += nums[i];
                }

                if (cur > max) {
                    max = cur;
                    start = j;
                    end = i;
                }
            }
            return { start, end };
        }
king-lxt commented 3 years ago
var maxSubArray = function (nums) {
            let res = nums[0];
            let start = 0, end = 0;
            for (let i = 1; i < nums.length; ++i) {
                if (nums[i - 1] > 0) {
                    nums[i] += nums[i - 1];
                } else {
                    start = i
                }
                res = Math.max(res, nums[i]);
                if (res <= nums[i]) end = i
            }
            return [start, end];
        };