博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
找出数字x的秩(小于或等于x的值的数目)
阅读量:6885 次
发布时间:2019-06-27

本文共 1094 字,大约阅读时间需要 3 分钟。

hot3.png

/**

 * 功能:假设你正在读取一串整数。每隔一段时间,你希望能找出数字x的秩(小于或等于x的值的数目)。

 * 实现track(int x)方法,每读入一个数字就会调用该方法;以及getRankOfNumber( int x)方法,返回值为小于或等于x的元素个数(不包括x本身)。

 */
[java]

 

  1. /** 
  2.  * 思路:采用二叉查找树 
  3.  * 执行中序遍历,并在访问结点时利用计数器记录数量,找到x时,计数器变量将会是小于x的元素的数量。 
  4.  * 在查找期间,如果向左移动,计数器不会变,因为右边跳过的所有指都比x大。 
  5.  * 向右移动时,跳过了左边的一堆元素,因此必须增加计数器的值,这个值等于左子树的元素个数。 
  6.  */  
  7. private static RankNode root=null;  
  8. public static void track(int number){  
  9.     if(root==null)  
  10.         root=new RankNode(number);  
  11.     else  
  12.         root.insert(number);  
  13. }  
  14.   
  15. public static int getRankOfNumber(int number){  
  16.     return root.getRank(number);  
  17. }  

[java]

 

  1. class RankNode{  
  2.     int leftSize=0;  
  3.     RankNode left,right;  
  4.     int data=0;  
  5.     public RankNode(int d){  
  6.         this.data=d;  
  7.     }  
  8.       
  9.     public void insert(int d){  
  10.         if(d<=data){  
  11.             if(this.left==null)  
  12.                 left=new RankNode(d);  
  13.             else  
  14.                 left.insert(d);  
  15.         }else{  
  16.             if(this.right==null)  
  17.                 right=new RankNode(d);  
  18.             else  
  19.                 right.insert(d);  
  20.         }  
  21.     }  
  22.       
  23.     public int getRank(int d){  
  24.         if(d==this.data)  
  25.             return this.leftSize;  
  26.         else if(d<this.data){  
  27.             if(left==null)  
  28.                 return -1;  
  29.             else   
  30.                 return left.getRank(d);  
  31.         }else{  
  32.             if(right==null)  
  33.                 return -1;  
  34.             else  
  35.                 return this.leftSize+1+right.getRank(d);  
  36.         }  
  37.     }  
  38.       

转载于:https://my.oschina.net/u/2822116/blog/793329

你可能感兴趣的文章
一个大数运算类
查看>>
Spring MVC 基于URL的映射规则(注解版)
查看>>
使用百度UMeditor富文本编辑器,修改自定义图片上传,修改源码
查看>>
EF架构~为导航属性赋值时ToList()的替换方案
查看>>
ARM compiler No such file or directory
查看>>
总结oninput、onchange与onpropertychange事件的用法和区别
查看>>
BZOJ 1968: [Ahoi2005]COMMON 约数研究(新生必做的水题)
查看>>
windows下安装redis
查看>>
[LeetCode] Add Digits
查看>>
钉钉服务器端SDK PHP版
查看>>
记录mysql性能查询过程
查看>>
Appium 服务关键字
查看>>
线程安全日期格式化操作的几种方式
查看>>
android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档
查看>>
[家里蹲大学数学杂志]第388期一套泛函分析期末试题参考解答
查看>>
解决iOS Xcode 模拟器键盘不弹出
查看>>
ArcGIS Desktop 遇到严重的应用程序错误
查看>>
增加eclipse启动的Tomcat内存的
查看>>
springboot jndi禁用
查看>>
MySQL5.7之Group Replication
查看>>