求一个数组的秩 Java实现

来源:互联网 发布:java 接口实例 编辑:程序博客网 时间:2024/05/20 23:33

问题:现在我们要读入一串数,同时要求在读入每个数的时候算出它的秩,即在当前数组中小于等于它的数的个数(不包括它自身),请设计一个高效的数据结构和算法来实现这个功能。 给定一个int数组A,同时给定它的大小n

分析:顺序读入一串数据,读入当前数求秩,秩存在于该数据之前的数据流中,这类似于构建一个二叉排序树过程,并在该过程中计算当前结点所在的位置。在构造二叉排序树的过程中,每个树节点保存其左子树的个数。

class TreeNode {TreeNode left;TreeNode right;int leftSize = 0;int val;TreeNode(int val) {this.val = val;}TreeNode() {}public void insert(int val) {if (this.val > val) {if (left != null) {left.insert(val);} else {left = new TreeNode(val);}leftSize++;} else {if (right != null) {right.insert(val);} else {right = new TreeNode(val);}}}public int getRank(int val) {if (this.val > val) {if (left != null) {return left.getRank(val);} else {return 0;}}else if(this.val<val){if(right!=null){return right.getRank(val)+leftSize+1;}else{return leftSize+1;}}else{return leftSize;}}}public class Rank {public static int[] getRankOfNumber(int[] A, int n) {int []b=new int[n];TreeNode tree=new TreeNode(A[0]);for(int i=1;i<n;i++){tree.insert(A[i]);b[i]=tree.getRank(A[i]);}return b;}


0 0