package com.interview.flag.g; import com.interview.utils.ConsoleWriter; /** * Created_By: stefanie * Date: 14-12-29 * Time: 下午9:45 */ public class G2_CountingArrayBST { class BSTNode{ int value; int size = 1; BSTNode left, right; public BSTNode(int value){ this.value = value; } } public int[] generate(int[] A){ int[] B = new int[A.length]; BSTNode root = null; for(int i = A.length - 1; i >= 0; i--) root = insert(root, A[i], B, i); return B; } private BSTNode insert(BSTNode node, int value, int[] B, int offset){ if(node == null) return new BSTNode(value); if(value <= node.value){ node.left = insert(node.left, value, B, offset); } else { B[offset] += (node.left == null? 0 : node.left.size) + 1; node.right = insert(node.right, value, B, offset); } node.size++; return node; } public static void main(String[] args){ G2_CountingArrayBST generator = new G2_CountingArrayBST(); int[] A = new int[]{5, 1, 3, 4, 2}; //4,0,1,1,0 ConsoleWriter.printIntArray(generator.generate(A)); } }