zoukankan      html  css  js  c++  java
  • 11.8 实现数据结构和算法支持track和rank操作。

    track操作类似与插入操作。

    rank操作返回比当前元素小或者相等的元素数。

    思路:track操作插入构造BST(没有保证平衡),但是节点增加一个leftSize,这里学习一下。

    public class Solution {
        private static RankNode root = null;
    
        public static void track(int number) {
            if (root == null) {
                root = new RankNode(number);
            } else {
                root.insert(number);
            }
        }
    
        public static int getRankOfNumber(int number) {
            return root.getRank(number);
        }
    
        public static void main(String[] args) {
            track(20);
            track(15);
            track(25);
            track(10);
            track(23);
            track(5);
            track(13);
            track(24);
            System.out.println(getRankOfNumber(20));
            System.out.println(getRankOfNumber(15));
            System.out.println(getRankOfNumber(8));
    
        }
    }
    
    class RankNode {
        int val;
        int leftSize;
        RankNode left;
        RankNode right;
    
        public RankNode(int v) {
            val = v;
        }
    
        public void insert(int t) {
            if (t <= val) {
                if (left != null) {
                    left.insert(t);
                } else {
                    left = new RankNode(t);
                }
                leftSize++;
            } else {
                if (right != null) {
                    right.insert(t);
                } else {
                    right = new RankNode(t);
                }
            }
        }
    
        public int getRank(int t) {
            if (t == val) {
                return leftSize;
            } else if (t < val) {
                if (left == null)
                    return -1;
                else
                    return left.getRank(t);
            } else {
                if (right == null)
                    return -1;
                else {
                    return right.getRank(t) + leftSize + 1;
                }
            }
    
        }
    
    }
  • 相关阅读:
    CocosCreator 手动设置刚体接触回调函数
    CocosCreator 组件添加依赖的其它组件
    Cocos Creator 动画控制
    Cocos Creator Editor 扩展右键菜单
    CocosCreator 代码添加点击事件函数
    jsfl 读取xml
    Markdown 箭头
    Markdown 数学公式输入
    Cocos Creator Editor 创建.anim文件
    VS2017调试技巧
  • 原文地址:https://www.cnblogs.com/jdflyfly/p/3932950.html
Copyright © 2011-2022 走看看