• 918. 环形子数组的最大和


    文章目录

    1. 背

    这道题就是最大子数组扣个环。

    可见有下面两种情况。,如果在这个最大的子数组在数组内部,和上道题一毛一样,但是如果跨环了,就不好处理了。所以可以统计最小的子数组,用整个数组的和减去这个最小子数组就是结果了。再两者取最大值就行了
    ’但是如果跨数组的结果是不可能小于0的。比如数据是{-3,-2,-3},正常的结果是-8,但是如果简单的对跨数组和非跨数组取max,答案就会是max(-8,0)=0。
    图片来自这里:https://leetcode.cn/problems/maximum-sum-circular-subarray/solution/wo-hua-yi-bian-jiu-kan-dong-de-ti-jie-ni-892u/
    在这里插入图片描述

    2. 题目

    给定一个长度为 n 的环形整数数组 nums ,返回 nums 的非空 子数组 的最大可能和 。

    环形数组 意味着数组的末端将会与开头相连呈环状。形式上, nums[i] 的下一个元素是 nums[(i + 1) % n] , nums[i] 的前一个元素是 nums[(i - 1 + n) % n] 。

    子数组 最多只能包含固定缓冲区 nums 中的每个元素一次。形式上,对于子数组 nums[i], nums[i + 1], …, nums[j] ,不存在 i <= k1, k2 <= j 其中 k1 % n == k2 % n 。

    示例 1:

    输入:nums = [1,-2,3,-2]
    输出:3
    解释:从子数组 [3] 得到最大和 3
    示例 2:

    输入:nums = [5,-3,5]
    输出:10
    解释:从子数组 [5,5] 得到最大和 5 + 5 = 10
    示例 3:

    输入:nums = [3,-2,2,-3]
    输出:3
    解释:从子数组 [3] 和 [3,-2,2] 都可以得到最大和 3

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/maximum-sum-circular-subarray
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    class Solution {
    public:
    int connected(const vector& nums) {
      int n = static_cast(nums.size());
      if (1 == n) return nums[0];
      int max_num = nums[0];
      int pre_num = nums[0];
      for (int i = 1; i < n; ++i) {
        int cur = max(pre_num, 0) + nums[i];
        max_num = max(max_num, cur);
        pre_num = cur;
      }
      return max_num;
    }
    
    int disconnected(const vector& nums) {
      int n = static_cast(nums.size());
      if (1 == n) return nums[0];
      int min_num = nums[0];
      int pre_num = nums[0];
      for (int i = 1; i < n; ++i) {
        int cur = min(pre_num, 0) + nums[i];
        min_num = min(cur, min_num);
        pre_num = cur;
      }
      return accumulate(nums.begin(), nums.end(), 0) - min_num;
    }
    
    int maxSubarraySumCircular(const vector& nums) {
      int connect = connected(nums);
      int disconnect = disconnected(nums);
      return connect > 0 ? max(connect, disconnect) : connect;
    }
    
    
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
  • 相关阅读:
    基于卷积神经网络的分类算法
    定时器的使用和线程安全
    编写一个vscode的插件
    使用腾讯云服务器安装宝塔Linux面板教程_图文全流程
    Ajax跨域请求的两种实现方式
    TXT文本文件存储
    (十七)admin-boot项目之国际化支持
    大数据讲课笔记1.3 Linux目录操作
    高并发秒杀项目总结
    【在线编程-Python篇】Python入门 04 列表(上)
  • 原文地址:https://blog.csdn.net/qigezuishuaide/article/details/127457391