leetcode-数组-215-数组中的第K个最大元素

167 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情

Hi, 大家好。我是新人,程序员库里。

今后会按类分享算法题。

今天给大家分享第7道leetcode上数组中使用双指针相关的算法题。

215. 数组中的第K个最大元素

leetcode地址:leetcode-cn.com/problems/kt…

难度

中等

描述

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

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

示例1

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

示例2

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

提示:

  • 1 <= k <= nums.length <= 104
  • -104 <= nums[i] <= 104

原理

  1. 首先定义一个变量len表示数组的长度,在外层遍历 k 次。
  2. 定义变量max,初始值是数组的第一项,表示默认当前第一个值最大
  3. 定义变量index,初始值0,表示当前数组中最大值的索引
  4. 在内循环从第2个值开始遍历,比较max的值和当前遍历的值
  5. 如果max小于当前遍历的值,就把当前的值赋值给max,同时将当前值的索引赋值给index
  6. 遍历完第一次后,max表示当前最大的元素,然后把当前最大的值从数组中删除
  7. 继续从外层循环遍历,重复上述操作
  8. 遍历k次后,将当前第k大值赋值给max,最后返回max

代码

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