第一题 数组中的第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)
发表回复