题目:
给定整数数组 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
解法
方案一:
最简单,先排序之后再到对应的位置取值
let findKthLargest = function (nums,k) {nums.sort((a,b) => b - a); //降序排序return nums[k-1];}console.log(findKthLargest([3,2,3,1,2,4,5,5,6],4));console.log(findKthLargest( [3,2,1,5,6,4],2));//两者的原理相同只是排序不同导致获取对应位置的方式不同let findKthLargest = function (nums,k) {nums.sort((a,b) => a - b); //升序排序return nums[nums.length -k];}console.log(findKthLargest([3,2,3,1,2,4,5,5,6],4));console.log(findKthLargest( [3,2,1,5,6,4],2));
方案二:
使用冒泡排序
var findKthLargest = function (nums, k) {// 冒泡排序// 从后往前确定元素for (let i = nums.length - 1; i >= nums.length - k; i--) {// 从前往后,相邻两个元素比较,交换for (let j = 0; j < i; j++) {if (nums[j] > nums[j + 1]) {[nums[j], nums[j + 1]] = [nums[j + 1], nums[j]];}}}return nums[nums.length-k];};console.log(findKthLargest([3, 2, 1, 5, 6, 4], 2));console.log(findKthLargest([3,2,3,1,2,4,5,5,6],4));
