leetcode215.数组中的第K个最大元素 | 刷题打卡

187 阅读1分钟

题目描述

leetcode链接:leetcode-cn.com/problems/kt…

在未排序的数组中找到第 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

提示:

  • 你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。

思路描述

关键是从大到小进行排序,然后输出第 k 个值。可以趁机了解一下不同排序算法之间的效率。

AC代码

js 中自带的 sort 方法

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var findKthLargest = function(nums, k) {
    const arr = nums.sort((a, b) => b - a);
    return arr[k-1]
};

image.png

冒泡排序

var findKthLargest = function(nums, k) {
    const len = nums.length
    for (let i = 0; i < len-1; i++) {
        for (let j = 0; j < len - 1 - i; j++) {
            if (nums[j] < nums[j+1]) {
                let temp = nums[j];
                nums[j] = nums[j+1];
                nums[j+1] = temp;
            }
        }
    }
    return nums[k-1]
};

image.png

选择排序

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

image.png

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情