• Leetcode-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 ≤ 数组的长度。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    class Solution {
    public:
        int findKthLargest(vector<int>& nums, int k) {
            int ans = find_k_min(nums, k-1, 0, nums.size()-1);
            return ans;
        }
        int find_k_min(vector<int>& nums, int k, int left, int right)
        {
            if(left== right) return nums[left];
            int k_site = find_k(nums, left, right);
            
            if(k== k_site) return nums[k_site];
            else if (k< k_site) return find_k_min(nums, k, left, k_site-1);
            else return find_k_min(nums, k, k_site+1, right);
        }
        int find_k(vector<int>& num, int left, int right)
        {
            int site= left; //任取一个点作为轴
            int x = num[site]; 
            swap(num[site], num[right]); //将作为分界的值放在最后;
            int cnt = left;
            
            for (int i = left; i< right; i ++) 
            {
                if(num[i]> x)
                {
                    /*如果A[i]> x, 则把A[i]放到左边*/
                    swap(num[i], num[cnt]);
                    cnt++;
                }
            }
            
            site = cnt;
            swap(num[right], num[site]);
            return site;
        }
    };
  • 相关阅读:
    计算机网络基础
    OA项目(MVC项目)
    修改XML的节点内容
    项目实战-电商(网上书城)
    DataTables ajax bootstrap 分页/搜索/排序/常见问题
    DNS服务器解析域名的过程
    bootstrap 模态框
    QuickChm 制作chm文档 chm文档脚本错误,乱码
    poi 读取word文档
    commons -lang(2) RandomStringUtils RandomUtils
  • 原文地址:https://www.cnblogs.com/Amaris-diana/p/13266526.html
Copyright © 2020-2023  润新知