当前位置: 面试刷题>> 连续数组 (经典算法题500道)


题目描述补充

题目:连续数组

给定一个未排序的整数数组 nums,找出数组中的一个连续子数组(至少包含两个元素),使得子数组的和最大,并返回该子数组的和。

注意:

  • 数组中的元素可能包含负数。
  • 返回的是子数组的和,而不是子数组本身。

示例

输入nums = [-2,1,-3,4,-1,2,1,-5,4]

输出6

解释:连续子数组 [4,-1,2,1] 的和最大,为 6

PHP 示例代码

function maxSubArray($nums) {
    $maxSum = $nums[0];
    $currentSum = $nums[0];
    
    for ($i = 1; $i < count($nums); $i++) {
        // 如果当前元素加上之前的和比当前元素小,则重新开始计算当前和
        $currentSum = max($nums[$i], $currentSum + $nums[$i]);
        // 更新最大和
        $maxSum = max($maxSum, $currentSum);
    }
    
    return $maxSum;
}

// 测试
$nums = [-2,1,-3,4,-1,2,1,-5,4];
echo maxSubArray($nums); // 输出 6

Python 示例代码

def maxSubArray(nums):
    max_sum = nums[0]
    current_sum = nums[0]
    
    for num in nums[1:]:
        current_sum = max(num, current_sum + num)
        max_sum = max(max_sum, current_sum)
    
    return max_sum

# 测试
nums = [-2,1,-3,4,-1,2,1,-5,4]
print(maxSubArray(nums))  # 输出 6

JavaScript 示例代码

function maxSubArray(nums) {
    let maxSum = nums[0];
    let currentSum = nums[0];
    
    for (let i = 1; i < nums.length; i++) {
        // 如果当前元素加上之前的和比当前元素小,则重新开始计算当前和
        currentSum = Math.max(nums[i], currentSum + nums[i]);
        // 更新最大和
        maxSum = Math.max(maxSum, currentSum);
    }
    
    return maxSum;
}

// 测试
const nums = [-2,1,-3,4,-1,2,1,-5,4];
console.log(maxSubArray(nums)); // 输出 6

码小课网站中有更多相关内容分享给大家学习,包括但不限于算法题解、数据结构、编程技巧等,欢迎访问码小课网站深入学习。

推荐面试题