zoukankan      html  css  js  c++  java
  • Algs4-1.4.10二分查找找出元素所在的最小索引

    1.4.10修改二分查找算法,使之总是返回和被查找的键匹配的索引最小元素(且仍然能够保证对数级别的运行时间)。
    答: 以下代码rankMin。
    图片

    import java.util.Arrays;
    public class BinarySearch
    {
        public static int rank(int key,int[]a)
        {
            int lo=0;
            int hi=a.length-1;
            int keyIndex=-1;
            while (lo<=hi)
            {
                int mid=lo+(hi-lo)/2;
                if (key<a[mid]) hi=mid-1;
                else if(key>a[mid]) lo=mid+1;
                else  return mid;
             }
            return keyIndex;
         }
       
        public static int rankMin(int key,int[]a)
        {
            int lo=0;
            int hi=a.length-1;
            int keyIndex=-1;
            while (lo<=hi)
            {
                int mid=lo+(hi-lo)/2;
                if (key<a[mid]) hi=mid-1;
                else if(key>a[mid]) lo=mid+1;
                else
                {
                  keyIndex=mid;
                  hi=mid-1;
                }
            }
            return keyIndex;
         }
       
            public static int rankMax(int key,int[]a)
        {
            int lo=0;
            int hi=a.length-1;
            int keyIndex=-1;
            while (lo<=hi)
            {
                int mid=lo+(hi-lo)/2;
                if (key<a[mid]) hi=mid-1;
                else if(key>a[mid]) lo=mid+1;
                else
                {
                  keyIndex=mid;
                  lo=mid+1;
                }
            }
            return keyIndex;
         }

        public static void main(String[] args)
        {
            int[] whitelist=In.readInts(args[0]);
            int key=Integer.parseInt(args[1]);
            Arrays.sort(whitelist);
            StdOut.println("Key rank index is:"+ rank(key,whitelist));
            StdOut.println("Key rankMin index is:"+ rankMin(key,whitelist));
            StdOut.println("Key rankMax index is:"+ rankMax(key,whitelist));
        }
    }
  • 相关阅读:
    bzoj2683简单题 cdq分治
    bzoj3963[WF2011]MachineWorks cdq分治+斜率优化dp
    bzoj1767[Ceoi2009]harbingers 斜率优化dp
    bzoj2753[SCOI2012]滑雪与时间胶囊 最小生成树
    bzoj1492[NOI2007]货币兑换Cash cdq分治+斜率优化dp
    刷题总结——pole(uva 1638 dp)
    刷题总结——分配笔名(51nod1526 trie树)
    刷题总结——树有几多愁(51nod1673 虚树+状压dp+贪心)
    刷题总结——book of evil(codefoeces 337D)
    刷题总结——解方程(NOIP2014)
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9854410.html
Copyright © 2011-2022 走看看