5.24题解

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];               
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值