题目描述
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]
};
冒泡排序
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]
};
选择排序
/**
* @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]
};
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情