Leetcode 普通数组 1

题号直达: 53 最大子数组和 | 56 合并区间

1. LeetCode 53. 最大子数组和 ↑

题目

给你一个整数数组 nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

测试样例

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

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

示例 3:
输入:nums = [5,4,-1,7,8]
输出:23

代码(Python)

class Solution(object):
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        dp = [0] * len(nums)
        dp[0] = nums[0]
        sum = nums[0]
        for i in range(1, len(nums)):
            dp[i] = max(nums[i] + dp[i - 1], nums[i])
            sum = max(sum, dp[i])
        return sum

思路解析

  • 定义 dp[i] 为以 i 结尾的连续子数组的最大和。要么把当前元素 nums[i] 接在前面的子数组后面(nums[i] + dp[i-1]),要么就从当前元素重新开始(nums[i]),取两者较大。
  • 用一个变量 sum 维护所有 dp[i] 中的最大值,也就是答案。
  • 遍历一遍数组即可完成状态转移,时间复杂度为 O(n),空间复杂度为 O(n)。

2. LeetCode 56. 合并区间 ↑

题目

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [start_i, end_i]。
请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。

测试样例

示例 1:
输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠,将它们合并为 [1,6]。

示例 2:
输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]

示例 3:
输入:intervals = [[4,7],[1,4]]
输出:[[1,7]]
解释:区间 [1,4] 和 [4,7] 可被视为重叠区间。

代码(Python)

class Solution(object):
    def merge(self, intervals):
        if not intervals:
            return []
        # 按区间起点排序
        intervals.sort(key=lambda x: x[0])
        merged = []
        current = intervals[0]
        for interval in intervals[1:]:
            if interval[0] <= current[1]:  # 有重叠,扩展右端点
                current[1] = max(current[1], interval[1])
            else:  # 无重叠,收当前区间,开始新的区间
                merged.append(current)
                current = interval
        merged.append(current)  # 添加最后一个区间
        return merged

思路解析

  • 先按每个区间的起点从小到大排序,这样重叠的区间会被排在一起。
  • 用 current 记录当前正在合并的区间,从左到右遍历后续区间:
    • 如果新区间左端点 interval[0] 小于等于 current[1],说明重叠,更新右端点为 max(current[1], interval[1]);
    • 否则表示不重叠,把 current 放进结果数组,然后把 current 换成新区间。
  • 遍历结束后别忘了把最后一个 current 加入结果。整体只排序一次再线性扫描,时间复杂度为 O(n log n),空间复杂度 O(1)(不计结果数组)。
posted @ 2026-10-10 17:34  Phier  阅读(24)  评论(0)    收藏  举报