题目
给定整数数组
nums
和整数k
,请返回数组中第k
个最大的元素。
输入: [3,2,3,1,2,4,5,5,6], k = 4 输出: 4
思路一
我们可以借用js的API,先创建一个n变量将形参nums的长度存储起来,然后再将nums的形参使用sort方法进行升序排列,排序过后在将当前形参nums的形参索引值为n-k的元素返回出去即可
var findKthLargest = function(nums, k) { let n = nums.length; nums.sort((a, b) => b - a) return nums[k-1] };
思路二
我们声明一个search函数,我们将形参nums和形参k传递进去,最后search函数的返回值就是第K个最大元素的值,在search函数中,我们先声明了两个变量,分别是left和right,它们是两个空数组,在先取出第一个数nums[0]存储到temp变量中,接下来进行遍历数组,如果当前遍历的值大于等于nums[0]的就通过push的方法添加到left数组中,如果当前的遍历的值小于nums[0]就通过push的方法添加到right数组中,如果left数组长度等于k形参,则直接返回nums[0],否则就继续判断如果左边数组长度小于k,则说明目标元素在right数组中,那么我们就调用自身把right数组传递进去,如果left数组长度大于k,说明目标元素在左边,以此往复,我们将就能得出第K个最大元素,将其返回出去即可
/** * @param {number[]} nums * @param {number} k * @return {number} */ var findKthLargest = function(nums, k) { return search(nums,k); }; function search(nums,k){ const left = [],right = []; const temp = nums[0]; for(let i=0 ;i<nums.length;i++){ if(nums[i]<temp){ right.push(nums[i]); } else{ left.push(nums[i]); } } if(left.length == k){ return left[0]; }else if(left.length<k){ return search(right,k-left.length); }else{ left.splice(0,1); return search(left,k); } }