2.7 KiB
https://leetcode.cn/problems/maximum-subarray/description/ 给你一个整数数组 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 提示: 1 <= nums.length <= 105 -104 <= nums[i] <= 104 进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的 分治法 求解。
双指针遍历 n-1 + n-2 + ... + 1 = n*(n-1)/2 如果指针倒过来,结构对称算法仍然不变
穷举状态 定义 n[i] 为第i个元素的值 定义f[i]为offset i所在位置前缀和,两个前缀和相减就是之间的和,仍要双指针遍历 定义f[i]为 offset i 为结尾的 最大子数组和
那么 f[i] = f[i-1] d[i] <= 0 = f[i - 1] + d[i] d[i] > 0 且初始时 f[0] = 0 d[i] <= 0 f[0] = d[0] d[0] > 0
https://leetcode.cn/problems/substring-with-largest-variance/description/?envType=daily-question&envId=2025-03-16 进阶 最大波动子串 字符串的 波动 定义为子字符串中出现次数 最多 的字符次数与出现次数 最少 的字符次数之差。 给你一个字符串 s ,它只包含小写英文字母。请你返回 s 里所有 子字符串的 最大波动 值。 子字符串 是一个字符串的一段连续字符序列。 示例 1: 输入:s = "aababbb" 输出:3 解释: 所有可能的波动值和它们对应的子字符串如以下所示:
- 波动值为 0 的子字符串:"a" ,"aa" ,"ab" ,"abab" ,"aababb" ,"ba" ,"b" ,"bb" 和 "bbb" 。
- 波动值为 1 的子字符串:"aab" ,"aba" ,"abb" ,"aabab" ,"ababb" ,"aababbb" 和 "bab" 。
- 波动值为 2 的子字符串:"aaba" ,"ababbb" ,"abbb" 和 "babb" 。
- 波动值为 3 的子字符串 "babbb" 。 所以,最大可能波动值为 3 。 示例 2:
输入:s = "abcde" 输出:0 解释: s 中没有字母出现超过 1 次,所以 s 中每个子字符串的波动值都是 0 。
提示: 1 <= s.length <= 104 s 只包含小写英文字母。 穷举状态 第一层双指针遍历出每一个子字符串,第二层求出波动 n(n-1)/2 * o(求波动) 反过来求波动 遍历每一种字母组合 26 * 26 每一种字母组合变为 每一个小部分就变成了最大子数组和