使用kotlin解决这个问题:给你一个整数数组 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) 的解法,尝试使用更为精妙的 分治法 求解。
时间: 2023-11-27 19:49:44 浏览: 120
以下是使用 Kotlin 实现的 O(n) 解法:
```kotlin
fun maxSubArray(nums: IntArray): Int {
var maxSum = nums[0]
var currentSum = nums[0]
for (i in 1 until nums.size) {
currentSum = maxOf(currentSum + nums[i], nums[i])
maxSum = maxOf(maxSum, currentSum)
}
return maxSum
}
```
思路是遍历整个数组,对于每个元素,计算以该元素为结尾的最大和的连续子数组的和,并将其与当前的最大值比较,更新最大值。由于只需要遍历一次数组,时间复杂度为 O(n)。
可以使用以下代码进行测试:
```kotlin
fun main() {
val nums1 = intArrayOf(-2,1,-3,4,-1,2,1,-5,4)
println(maxSubArray(nums1)) // 输出 6
val nums2 = intArrayOf(1)
println(maxSubArray(nums2)) // 输出 1
val nums3 = intArrayOf(5,4,-1,7,8)
println(maxSubArray(nums3)) // 输出 23
}
```
阅读全文