码迷,mamicode.com
首页 > 编程语言 > 详细

215. Kth Largest Element in an Array找出数组中第k大的值

时间:2017-09-21 22:24:07      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:注意   adjust   最大的   nbsp   return   amp   size   ==   wap   

堆排序做的,没有全部排序,找到第k个就结束

public int findKthLargest(int[] nums, int k) {
        int num = 0;
        if (nums.length <= 1)
            return nums[0];
        int heapSize = nums.length;
        //1.构建最大堆
        int half = (heapSize-2)/2;
        for (int i = half;i >= 0;i--)
        {
            adjust(nums,heapSize,i);
        }
        while (heapSize > 1)
        {
            //2.取出最大值
            swap(0,heapSize-1,nums);
            heapSize--;
            num++;
            if(num == k)
                break;
            //3.调整堆
            adjust(nums,heapSize,0);
        }
        return nums[nums.length-k];
    }

    public void adjust(int[] nums,int heapSize,int index)
    {
        int left = index*2+1;
        int right = index*2+2;
        int biggest = index;
        if (left < heapSize && nums[left] > nums[biggest])
            biggest = left;
        //注意这里都是和nums[biggest]比较,别写成index,因为要找出最大的值
        if (right < heapSize && nums[right] > nums[biggest])
            biggest = right;
        if (biggest != index)
        {
            swap(index,biggest,nums);
            adjust(nums,heapSize,biggest);
        }
    }
    public void swap(int a,int b,int[] nums)
    {
        int temp = nums[a];
        nums[a] = nums[b];
        nums[b] = temp;
    }

 

215. Kth Largest Element in an Array找出数组中第k大的值

标签:注意   adjust   最大的   nbsp   return   amp   size   ==   wap   

原文地址:http://www.cnblogs.com/stAr-1/p/7571555.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!