215.数组中第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
你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。
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];
}
230.二叉搜索树中第K小的元素
给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。
说明:
你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。
示例 1:
输入: root = [3,1,4,null,2], k = 1
3
/
1 4
2
输出: 1
示例 2:
输入: root = [5,3,6,2,4,null,null,1], k = 3
5
/
3 6
/
2 4
/
1
输出: 3
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
void search(struct TreeNode* root,int k,int* contain,int* count){
if(root==NULL) return;
else{
search(root->left,k,contain,count);
(*count)++;
if(*count==k) contain[0] = root->val;
search(root->right,k,contain,count);
}
int kthSmallest(struct TreeNode* root, int k){
int* contain = malloc(sizeof(int));
int* count = malloc(sizeof(int));
*count = 0;
search(root,k,contain,count);
return contain[0];
}