有道难题2的搞笑解,时间复杂度O(1)

本文介绍了一种基于静态数组实现的经典查表法,并通过一个具体的例子展示了如何使用二分查找算法来高效检索预定义的整数数组。该方法适用于数学库等场景中,能够显著提高数据查询效率。

经典查表法

        static int[] arr;

        static T2()
        {
            arr = new int[1593];
            arr[0] = 1729;
            arr[1] = 4104;
            arr[2] = 13832;
            arr[3] = 20683;
            arr[4] = 32832;
            arr[5] = 39312;
            arr[6] = 40033;
            arr[7] = 46683;
            .........
            arr[1585] = 1156658048;
            arr[1586] = 1167270776;
            arr[1587] = 1181984832;
            arr[1588] = 1217741768;
            arr[1589] = 1228225789;
            arr[1590] = 1231216119;
            arr[1591] = 1234859661;
            arr[1592] = 1477354411;
        }

        public static int count(int n)
        {
            int max = 1592;
            int min = 0;
            int cur=0;
            while (max >= min)
            {
                cur = (max + min) / 2;
                if (n < arr[cur])
                {
                    max = cur - 1;
                }
                else if (n > arr[cur])
                {
                    min = cur + 1;
                }
                else
                {
                    break;
                }
            }
            if (max < min)
            {
                cur = max;
            }
            return cur+1;
        }

内部实现一个失败时返回偏大值的二分查找

475574的10W次查找耗时10毫秒

仅供玩耍,不过其实是很多数学库内部的处理方式。我不相信Math.Sin会去进行实际的运算。

 完整代码 /Files/Chinese-xu/T2_ChineseXUTable.rar

 

 

转载于:https://www.cnblogs.com/Chinese-xu/archive/2009/06/03/1495706.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值