关于golang:golangleetcode中级数组中的第K个最大元素寻找峰值

第一题 数组中的第K个最大元素

题目

解题

简略的排序函数+定位

代码

func findKthLargest(nums []int, k int) int {
    sort.Ints(nums)
    return nums[len(nums)-k]
}

复杂度剖析

工夫复杂度:O(nlogn)。sort的排序函数复杂度最坏状况均为O(nlogn)

空间复杂度:O(1) sort大部分排序的实现都是在原数组的根底上原地实现的

对于sort包的剖析

https://www.cnblogs.com/dongj…

第二题 寻找峰值

题目

解题思路

对于数组首元素和尾元素为最大值的状况
因为默认nums[-1] = nums[n] = -∞
因而这两个元素一样是峰值

代码

func findPeakElement(nums []int) int {
    n := len(nums)

    // 辅助函数,输出下标 i,返回 nums[i] 的值
    // 不便解决 nums[-1] 以及 nums[n] 的边界状况
    get := func(i int) int {
        if i == -1 || i == n {
            return math.MinInt64
        }
        return nums[i]
    }

    left, right := 0, n-1

    for {
        mid := (left + right) / 2
        if get(mid-1) < get(mid) && get(mid) > get(mid+1) {
            return mid
        }
        if get(mid) < get(mid+1) {
            left = mid + 1
        } else {
            right = mid - 1
        }
    }
}

复杂度剖析

工夫复杂度:O(logn),其中 n 是数组 nums 的长度。

空间复杂度:O(1)

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理