zoukankan      html  css  js  c++  java
  • [Swift]LeetCode1191. K 次串联后最大子数组之和 | K-Concatenation Maximum Sum

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(www.zengqiang.org
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/11521662.html
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    Given an integer array arr and an integer k, modify the array by repeating it k times.

    For example, if arr = [1, 2] and k = 3 then the modified array will be [1, 2, 1, 2, 1, 2].

    Return the maximum sub-array sum in the modified array. Note that the length of the sub-array can be 0 and its sum in that case is 0.

    As the answer can be very large, return the answer modulo 10^9 + 7.

    Example 1:

    Input: arr = [1,2], k = 3
    Output: 9
    

    Example 2:

    Input: arr = [1,-2,1], k = 5
    Output: 2
    

    Example 3:

    Input: arr = [-1,-2], k = 7
    Output: 0
    

    Constraints:

    • 1 <= arr.length <= 10^5
    • 1 <= k <= 10^5
    • -10^4 <= arr[i] <= 10^4

    给你一个整数数组 arr 和一个整数 k

    首先,我们要对该数组进行修改,即把原数组 arr 重复 k 次。

    举个例子,如果 arr = [1, 2] 且 k = 3,那么修改后的数组就是 [1, 2, 1, 2, 1, 2]

    然后,请你返回修改后的数组中的最大的子数组之和。

    注意,子数组长度可以是 0,在这种情况下它的总和也是 0

    由于 结果可能会很大,所以需要 模(mod) 10^9 + 7 后再返回。 

    示例 1:

    输入:arr = [1,2], k = 3
    输出:9
    

    示例 2:

    输入:arr = [1,-2,1], k = 5
    输出:2
    

    示例 3:

    输入:arr = [-1,-2], k = 7
    输出:0
    

    提示:

    • 1 <= arr.length <= 10^5
    • 1 <= k <= 10^5
    • -10^4 <= arr[i] <= 10^4

    Runtime: 396 ms
    Memory Usage: 23.8 MB
     1 class Solution {
     2     func kConcatenationMaxSum(_ arr: [Int], _ k: Int) -> Int {
     3         var arr = arr
     4         var oneSum:Int = 0
     5         for v in arr
     6         {
     7             oneSum += v
     8         }
     9         var ans:Int = 0
    10         let len:Int = arr.count
    11         if oneSum > 0 && k >= 2
    12         {
    13             var leftAns:Int = 0
    14             var rightAns:Int = 0
    15             var tmpAns:Int = 0
    16             for i in 0..<len
    17             {
    18                 tmpAns += arr[i]
    19                 leftAns = max(leftAns, tmpAns)
    20             }
    21             tmpAns = 0
    22             for i in stride(from:len - 1,through:0,by:-1)
    23             {
    24                 tmpAns += arr[i]
    25                 rightAns = max(rightAns, tmpAns)
    26             }
    27              ans = max(ans, leftAns + rightAns + (k-2) * oneSum)
    28         }
    29         if k > 1
    30         {
    31             arr += arr
    32         }
    33         var tmpAns:Int = 0
    34         for v in arr
    35         {
    36             tmpAns += v
    37             ans = max(ans, tmpAns)
    38             if tmpAns < 0
    39             {
    40                 tmpAns = 0
    41             }
    42         }
    43         return ans%1000000007
    44     }
    45 }
  • 相关阅读:
    Haproxy 配置项及配置实例-Haproxy入门教程
    Spring Boot 配置-Spring Boot教程深入浅出系列
    RMI 接口和类概述-RMI快速入门教程
    分布式和非分布式模型对比-RMI快速入门教程
    RMI分布式对象模型-RMI快速入门教程
    RMI介绍-RMI快速入门教程
    Qt编写可视化大屏电子看板系统17-柱状堆积图
    Qt开发经验小技巧161-165
    Qt编写安防视频监控系统60-子模块4云台控制
    MyBatis的关联映射,resultMap元素之collection子元素,实现一对多关联关系(节选自:Java EE企业级应用开发教程)
  • 原文地址:https://www.cnblogs.com/strengthen/p/11521662.html
Copyright © 2011-2022 走看看