学渣带你刷Leetcode215. 数组中的第K个最大元素

tech2023-11-11  73

题目描述

在未排序的数组中找到第 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 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

白话题目:

给了一个没排序的数组,让我排序后,找到第k大的元素。

算法:

(1)利用C的快排,降序排列

(2)返回数组的第k-1个下标的元素

 

快排的解释: qsort(a, n, sizeof(int), cmp);

1 待排序数组,排序之后的结果仍放在这个数组中 2 数组中待排序元素数量 3 各元素的占用空间大小(单位为字节) 4 指向函数的指针,排序规则

int cmp(const void *a, const void *b) { return *(int*)b - *(int*)a; // 逆序 } ---------------------------------------------------------- int cmp(const void* a , const void* b)  //参数格式固定----升序 { int* a1 = (int*)a; //强制类型转换 int* b1 = (int*)b; return *a1 - *b1;   }

详细解释关注 B站  【C语言全代码】学渣带你刷Leetcode 不走丢 https://www.bilibili.com/video/BV1C7411y7gB

C语言完全代码

#include <stdio.h> #include <stdlib.h> //我们主要讲讲快排 int cmp(const void *a, const void *b) { return *(int*)b - *(int*)a; // 逆序 } int findKthLargest(int*a, int n, int k) { if (a == NULL || n == 0 || k == 0 || n < k) { return 0; // 参数错误 } qsort(a, n, sizeof(int), cmp); return a[k- 1]; } int main() { int numsSize,k; scanf("%d %d",&numsSize,&k); int nums[numsSize]; int i=0; for(i=0; i<numsSize; i++) { scanf("%d",&nums[i]); } int result; result=findKthLargest(nums, numsSize,k); printf("%d\n",result); return 0; }

最新回复(0)