zoukankan      html  css  js  c++  java
  • page61-将二分查找重写为一段面向对象的程序

    1 将二分查找重写为一段面向对象的程序 (用于在整数集合中进行查找的一种抽象数据类型)

    public class StaticSETofInts 【API】

      StaticSETofInts(int[] a )根据 a[]中的所有值创建一个集合

      boolean contains(int key) key是否存在于集合中。

    【数据实现】

    import java.util.Arrays;
    
    public class StaticSETofInts {
        
        private int[] a;
        public StaticSETofInts(int[] keys){
            
            a = new int[keys.length];
            for (int i = 0; i < keys.length; i++) 
                a[i] = keys[i];//保护性复制
            Arrays.sort(a);
        }
    
        public boolean contains(int key){
            return  rank(key) != -1;
        }
        
        private int rank(int key){//二分查找
            
            int low = 0;
            int high = a.length -1;
            while(low <= high){ //要么存在于a[low..high]中, 要么不存在。
                
                int mid = (low + high) /2;
                if(key < a[mid]) high = mid -1;
                else if(key > a[mid]) low  = mid + 1;
                else return mid;
            }
            return -1;
        }
    }

    【典型测试用例】

    public class Whitelist {
        
        public static void main(String[] args) {
            
            int[] w = new In(args[0]).readAllInts();
            StaticSETofInts set = new StaticSETofInts(w);
            
            while(!StdIn.isEmpty()){
                int key = StdIn.readInt();
                if(!set.contains(key)) System.out.println(key);
            }
        }
    }

    【打印结果】

  • 相关阅读:
    Linux ping 命令
    Linux ab 命令
    存储过程统计年月日的访问人数
    Struts Upload上传文件
    struts json登录
    javaScript没有块级作用域
    ThreadLocal(一):Thread 、ThreadLocal、ThreadLocalMap
    BeanUtils 学习教程
    WeakHashMap 理解笔记
    javaScript中的单引号与双引号
  • 原文地址:https://www.cnblogs.com/pacoson/p/4003945.html
Copyright © 2011-2022 走看看