Medium
Given an integer array nums and an integer k, return the kth largest element in the array.
Note that it is the kth largest element in the sorted order, not the kth distinct element.
Example 1:
Input: nums = [3,2,1,5,6,4], k = 2
Output: 5
Plain Text
복사
Example 2:
Input: nums = [3,2,3,1,2,4,5,5,6], k = 4
Output: 4
Plain Text
복사
Constraints:
•
1 <= k <= nums.length <=
•
<= nums[i] <=
My solution
K번째 큰 수를 고르는 문제이다. 같은 수가 여러개 있을 수 있다는 조건이 있어서 배열을 sort()한다음 바로 접근하면 원하는 값이 나오지 않을 것이다. 그래서 배열 내의 최댓값을 Math.max()를 통해 잡는다.
그리고 배열을 방문하면서 최댓값(cnt===1 시작)보다 작아질 때마다 카운트(cnt++)한다. 이 카운트가 K만큼 채워지면 해당 값이 답이 된다.
소스코드
/**
* @param {number[]} nums
* @param {number} k
* @return {number}
*/
const findKthLargest = function (nums, k) {
let cnt = 1;
nums.sort((a, b) => b - a);
const max = nums[0];
let answer = nums[0];
nums.forEach(v => {
if (v < max) cnt++;
if (cnt === k) answer = v;
});
return answer;
};
// test('TC1', () => {
// expect(findKthLargest([3, 2, 1, 5, 6, 4], 2)).toStrictEqual(5);
// });
// test('TC2', () => {
// expect(findKthLargest([3, 2, 3, 1, 2, 4, 5, 5, 6], 4)).toStrictEqual(4);
// });
test('TC3', () => {
expect(findKthLargest([-1, -1], 2)).toStrictEqual(-1);
});
JavaScript
복사