美文网首页JavaScript 数据结构与算法
JavaScript 算法(数组中的第K个最大元素)

JavaScript 算法(数组中的第K个最大元素)

作者: 阿畅_ | 来源:发表于2020-04-29 00:32 被阅读0次

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array

  • 仔细读题和示例,这个题很简单,题目中已经说了需要排序,然后从示例中可以看出,是从大到小的排序(从示例1中看出,输出是5,从大到小的排序中,第二个正好是 5)
先用 sort 实现
function findKthLargest(ary, key) {
  return ary.sort((a, b) => b - a)[key - 1]
}
用冒泡排序的方式
  • 注意 这里用冒泡排序不用遍历所有之后,在取出第 key 个值,可以直接排序中实现

因为冒泡排序每次都会把最大值,放到最后,我们只要排序到要找的那个 key 值,然后返回就可以了,不用排序所有的值

function findKthLargest(ary, key) {
  const len = ary.length - 1
  for (let i = len; i > len - key; i--) {
    for (let j = 0; j < i; j++) {
      if (ary[j] > ary[j + 1]) {
        const tem = ary[j]
        ary[j] = ary[j + 1]
        ary[j + 1] = tem
      }
    }
  }
  // 为什么要 + 1 - key
  // 因为:是正序排列,找出第 key 个大的数,要找出 key 的索引位置取出
  // 例如:const a =[1,2,3,4] 找出第3大的,结果是 2,这种写法就是 a[a.length - 3] 结果一样是 2
  return ary[len + 1 - key]
}
console.log(findKthLargest([5,1,16, 9, 6], 2)) // 9

相关文章

网友评论

    本文标题:JavaScript 算法(数组中的第K个最大元素)

    本文链接:https://www.haomeiwen.com/subject/pikwwhtx.html