标签:整数 描述 put int ++ list off NPU question
import java.util.ArrayList; public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { //特殊情况处理 if(k==0||input.length==0||input.length<k){ return new ArrayList<>(); } //创建堆 createHeap(input,k); //遍历k个数以外的数字 for(int i = k;i < input.length;i++){ downAdjust(input,i,k); } ArrayList<Integer> list = new ArrayList<>(); for(int i=0;i<k;i++){ list.add(input[i]); } return list; } //获取父节点 public int getParent(int pos){ return (pos - 1)/2; } //获取左节点 public int getLeft(int pos){ return pos*2+1; } //获取右节点 public int getRight(int pos){ return pos*2+2; } //两个节点交换位置 public void swap(int[] arr,int i,int j){ int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } //创建k大的堆 public void createHeap(int[] arr,int k){ for(int i=1;i<k;i++){ upAdjust(arr,i); } } //向上调整堆 public void upAdjust(int[] arr,int pos){ while(getParent(pos)>=0 && arr[getParent(pos)]<arr[pos]){ swap(arr,getParent(pos),pos); pos = getParent(pos); } } //向下调整堆 public void downAdjust(int[] arr,int pos,int k){ if(arr[0] <= arr[pos]){ return; } swap(arr,0,pos); pos = 0; while(getLeft(pos)<k){ int node = getLeft(pos); if(node + 1 < k &&arr[node + 1] > arr[node]){ node++; } if(arr[node] > arr[pos]){ swap(arr,node,pos); pos = node; }else{ break; } } } }
标签:整数 描述 put int ++ list off NPU question
原文地址:https://www.cnblogs.com/MoonBeautiful/p/13063381.html