题解 | #【模板】堆#
【模板】堆
https://www.nowcoder.com/practice/13f61c8c92404f5ea5d6fa4c692869fb
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { final String push = "push",pop = "pop",tio = "top"; Scanner scanner = new Scanner(System.in); //输入次数 int num = scanner.nextInt(); Head head = new Head(num); scanner.nextLine(); for(int i=0;i<num;i++){ String str = scanner.nextLine(); String[] split = str.split("\\s+"); if("push".equals(split[0])){ head.push(Integer.parseInt(split[1])); }else if("top".equals(split[0])){ head.top(); }else if("pop".equals(split[0])){ head.pop(); } } } } class Head{ private int[] array; private int length; public Head(int n){ array = new int[n]; length = 0; } public void push(int value){ array[length++] = value; for(int i = length / 2 - 1;i>=0;i = (i-1)/2){ adjustHeap(i); if(i==0){ break; } } } public void top(){ if(length == 0){ System.out.println("empty"); return; } System.out.println(array[0]); } public void pop(){ if(length == 0){ System.out.println("empty"); return; } System.out.println(array[0]); array[0] = array[length - 1]; length--; adjustHeap(0); } private void adjustHeap(int i){ int temp = array[i]; for(int k = 2 * i + 1;k<length;k=k*2+1){ if(k+1<length && array[k+1] > array[k]){ k++; } if(array[k] > temp){ array[i] = array[k]; i = k; }else{ break; } } array[i] = temp; } }