Leetcode前端必会系列:数组中的第K个最大元素

69 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情

引言

算法的技能对于程序员是百益而无一害,作为程序员无论是前端还是后端算法技能对于我们都是十分十分的重要,我将陆续整理并讲解前端程序员必须掌握的经典算法。

题目描述

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。

 

示例 1:

输入: [3,2,1,5,6,4], k = 2
输出: 5

示例 2:

输入: [3,2,3,1,2,4,5,5,6], k = 4
输出: 4

分析

根据题目的分析,我们如何轻松的找到第K大元素的值?我们可以借助选择排序然后选择第K次最大的时候就可以找到最大值了。

  1. 第一层循环,循环k次
  2. 第二层循环,每次都选择最大的值
  3. 第k次选择的就是目标结果了

解答

```
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var findKthLargest = function(nums, k) {
    let start = nums.length-1
    let index = 0
    let i,j
    for(i=0;i<k;i++) {
        let max = nums[0]
        index = 0
        for(j=0;j<nums.length-i;j++) {
            if(nums[j]>max) {
                max = nums[j]
                index = j
            }
        }
        let tmp = nums[index]
        nums[index] = nums[nums.length-1-i]
        nums[nums.length-1-i] = tmp
    }
    return nums[nums.length-k]
};
```
 

通过题目的分析,我们只需要通过k次选择排序结果就可以找出第K大的元素了,时间复杂度是o(n^2)。

总结

通过对数组中的第K个最大元素题目的讲解,大家学到了进行问题的解决。通选择排序组巧妙计算可以优雅的在低时间和空间复杂度下完成任务。