函数10-求最大值-max+maxOf3
时间: 2024-04-30 19:17:43 浏览: 14
好的,我知道了。下面是函数10-求最大值-max maxOf3的代码:
```python
def maxOf3(a, b, c):
"""
返回三个数中的最大值
"""
max_num = a
if b > max_num:
max_num = b
if c > max_num:
max_num = c
return max_num
```
你可以输入三个数,调用这个函数来获取它们中的最大值。
相关问题
使用分治法解决这个问题,用kotlin: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
使用分治法解决最大子序和问题的思路是将数组分成左右两部分,分别计算左边、右边和横跨左右两部分的最大子序和,最终的最大子序和就是这三个值的最大值。
下面是使用 Kotlin 实现的分治法:
```
fun maxSubArray(nums: IntArray): Int {
return maxSubArrayHelper(nums, 0, nums.size - 1)
}
fun maxSubArrayHelper(nums: IntArray, left: Int, right: Int): Int {
if (left == right) {
return nums[left]
}
val mid = (left + right) / 2
val leftMaxSum = maxSubArrayHelper(nums, left, mid)
val rightMaxSum = maxSubArrayHelper(nums, mid + 1, right)
var leftCrossMaxSum = Int.MIN_VALUE
var leftCrossSum = 0
for (i in mid downTo left) {
leftCrossSum += nums[i]
leftCrossMaxSum = maxOf(leftCrossMaxSum, leftCrossSum)
}
var rightCrossMaxSum = Int.MIN_VALUE
var rightCrossSum = 0
for (i in mid + 1..right) {
rightCrossSum += nums[i]
rightCrossMaxSum = maxOf(rightCrossMaxSum, rightCrossSum)
}
return maxOf(leftMaxSum, rightMaxSum, leftCrossMaxSum + rightCrossMaxSum)
}
```
在 `maxSubArray` 函数中,我们调用 `maxSubArrayHelper` 来计算最大子序和。在 `maxSubArrayHelper` 中,我们首先处理递归结束的情况,即 left == right,此时最大子序和就是 nums[left]。
然后,我们计算左半部分的最大子序和 `leftMaxSum` 和右半部分的最大子序和 `rightMaxSum`。接着,我们计算横跨左右两部分的最大子序和 `leftCrossMaxSum + rightCrossMaxSum`,其中 `leftCrossMaxSum` 表示左半部分的跨越中包含最后一个元素的最大子序和,`rightCrossMaxSum` 表示右半部分的跨越中包含第一个元素的最大子序和。
最后,我们返回 `leftMaxSum`、`rightMaxSum` 和 `leftCrossMaxSum + rightCrossMaxSum` 中的最大值即可。
这个算法的时间复杂度是 O(nlogn),空间复杂度是 O(logn)。
使用kotlin解决这个问题:239. 滑动窗口最大值 提示 困难 2.3K 相关企业 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1: 输入:nums = [1,3,-1,-3,5,3,6,7], k = 3 输出:[3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值 --------------- ----- [1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 3 6 7 3 1 3 [-1 -3 5] 3 6 7 5 1 3 -1 [-3 5 3] 6 7 5 1 3 -1 -3 [5 3 6] 7 6 1 3 -1 -3 5 [3 6 7] 7 示例 2: 输入:nums = [1], k = 1 输出:[1]
以下是使用 Kotlin 解决该问题的代码:
```kotlin
fun maxSlidingWindow(nums: IntArray, k: Int): IntArray {
val n = nums.size
if (n * k == 0) return intArrayOf()
if (k == 1) return nums
val left = IntArray(n)
left[0] = nums[0]
val right = IntArray(n)
right[n - 1] = nums[n - 1]
for (i in 1 until n) {
// from left to right
if (i % k == 0) left[i] = nums[i] else left[i] = maxOf(left[i - 1], nums[i])
// from right to left
val j = n - i - 1
if ((j + 1) % k == 0) right[j] = nums[j] else right[j] = maxOf(right[j + 1], nums[j])
}
val output = IntArray(n - k + 1)
for (i in 0..n - k) {
output[i] = maxOf(right[i], left[i + k - 1])
}
return output
}
```
该算法使用了双向遍历,分别从数组的左边和右边计算出每个窗口的最大值。最后将两个最大值中的较大值作为窗口的最大值。时间复杂度为 $O(n)$。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)