欧几里德与二分搜索

2021-07-19  本文已影响0人  小王ovo
public class test1 {
    /**
     * 欧几里徳公式,求最大公约数
     */
    public static int gcd(int p,int q){
        if (q==0){
            return p;
        }
        int r=p%q;
        return gcd(q,r);
    }

    /**
     * 二分
     * 
     * @param key 
     * @param array
     * @return
     */
    public static int rank(int key,int[] array){
        //搜索区域的前置坐标
        int lo=0;
        //最大的下标=数组长度-1
        int hi=array.length-1;
        while (lo<=hi){
            //开始二分
            int mid=lo+(hi-lo)/2;
            if (key>array[mid]){
                hi=mid-1;
            }else if (key<array[mid]){
                lo=mid+1;
            }else {
                return mid;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        int gcd = gcd(198, 20);
        System.out.println(gcd);

        int[] array={10,33,434,545,654,232};
        int rank = rank(5, array);
        if (rank==-1){
            System.out.println("没有");
        }else {
            System.out.println(rank);
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读