标签:空间 剑指offer 个数 nbsp inpu turn top null 描述
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { ArrayList<Integer> re = new ArrayList<Integer>(); if(input == null || input.length<k ||k==0){//判断非法 return re; } int[] heap = new int[k];//new一个堆空间 for(int i=0;i<k;i++){ heap[i] = input[i]; } for(int i = k/2;i>=0;i--){//调整大顶堆 adjustHeap(heap,i,k-1); } for(int i = k;i<input.length;i++){//对第k个以后的数,如果小于堆顶元素就和堆顶替换,否则不进行任何操作 if(input[i]<heap[0]){ heap[0] = input[i]; adjustHeap(heap,0,k-1); } } for(int i = 0;i<k;i++){ re.add(heap[i]); } return re; } public void adjustHeap(int[] heap,int left ,int right){//调整大顶堆 int target = heap[left]; for(int i=left*2+1;i<=right;i=i*2+1){ if(i<right&&heap[i]<heap[i+1]){ i++; } if(heap[i]<=target){ break; } heap[left] = heap[i]; left =i; } heap[left] =target; }
标签:空间 剑指offer 个数 nbsp inpu turn top null 描述
原文地址:https://www.cnblogs.com/zhacai/p/11019690.html