zoukankan      html  css  js  c++  java
  • topk小根堆解法

    import java.util.Arrays;
    
    public class topk {
        public static void main(String[] args)
        {
            int[] num={66,7,23,45,12,43,65,8,18,28,20,44,123,6,94,67,5,27,89,111,35};
            int k=7;
            int[] result=creatHeap(num,k);
            for(int i=k;i<num.length;i++)
            {
                if(num[i]>result[0])
                {
                    result[0]=num[i];
                    heapAdjust(result,0);
                }
            }
            Arrays.sort(result);
            for(int i=0;i<k;i++)
                System.out.println(result[i]);
        }
        public static int[] creatHeap(int[] num,int k)
        {
            int[] result=new int[k];
            for(int i=0;i<k;i++)
                result[i]=num[i];
            for(int i=result.length/2;i>=0;i--)
                heapAdjust(result,i);
            return result;
            
        }
        public static void heapAdjust(int[] num,int i)
        {
            int left=2*i+1;
            int right=2*(i+1);
            int min=i;
            if(i<num.length/2)
            {
                if(left<num.length&&num[left]<num[min])
                    min=left;
                if(right<num.length&&num[right]<num[min])
                    min=right;
                if(i!=min)
                {
                    int tmp=num[i];
                    num[i]=num[min];
                    num[min]=tmp;
                    heapAdjust(num,min);
                }
            }
        }
    }
  • 相关阅读:
    IOS性别
    IOS生命周期
    读书的作用
    Core Data
    解析Json数据
    sicily Knight Moves
    sicily 简单魔板2
    Sum of Consecutive Primes
    [OI笔记]杂题整理1(基础篇~)
    [IOI1994]The Castle
  • 原文地址:https://www.cnblogs.com/mingyao123/p/7428789.html
Copyright © 2011-2022 走看看