跳至主要内容

215. 数组中的第K个最大元素

class Solution {
public:
   
    void swap(std::vector<int>& nums, int i, int j)
    {
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = tmp;
    }

    int findKthLargest(std::vector<int>& nums, int k)
    {
        int start = 0;
        int end = nums.size() - 1;
        int kb = k;
        while (true)
        {
            int i = start;
            int j = end;
            int mid = nums[(i + j) / 2];

            while (i <= j)
            {
                while (i < nums.size() && nums[i] < mid)
                {
                    i++;
                }
                while (j >= 0 && nums[j] > mid)
                {
                    j--;
                }
                if (i <= j)
                {
                    swap(nums, i, j);
                    i++;
                    j--;
                }
            }

            if (end - start <= 1)
            {
                return nums[nums.size() - kb];
            }

            if (end - j >= k)
            {
                start = j + 1;
            }
            else
            {
                k = k - (end - j);
                end = j;
            }
        }
        return 0;
    }

};

评论

此博客中的热门博文

老毛子路由器无线桥接问题

  信道带宽:改成20M  关闭 DHCP 服务器  关闭动态 (DHCP) 路由 修改IP地址从192.168.123.1到192.168.1.114  无线 AP 工作模式:选择AP-Client+AP 无线 AP-Client 角色:选择LAN bridge 连上上级wifi done 路由器自身可能上不去网,执行: route add default  gw 192.168.1.1 不过这种方式无法翻墙 ////////////////////////////////////////////////////////////// 第二种方式 不改信道不关闭DHCP,保持网段是192.168.123.1 无线 AP 工作模式:选择AP-Client+AP 无线 AP-Client 角色:选择WAN 连上上级wifi done 路由器可以翻墙,但是192.168.1.1的机器访问不了192.168.123.1的机器 解决方法: 在192.168.123.1的机器把想要访问的机器比如192.168.123.100设置DMZ主机,这样就可以访问了,在 192.168.1.1能看到分配的ip比如192.168.1.115