贝尔的面试题:你认为效率最高的方法,实现从1加到100

看文章看到这样的题目及答案:

-------------------------------------------------------------------------------------------------------------------------------------

海贝尔的面试题:你认为效率最高的方法,实现从1加到100.

答案:1-100的累加相当于加50次101,这样循环次数从100次降为50次:

史上公认最变态的java程序员面试题,最后一题会了可以直接去微软!

-------------------------------------------------------------------------------------------------------------------------------------

有点勾起我的好奇心,于是就试了试

package fuckTest;

/**
 * Created by Administrator on 2017/7/28.
 */
public class TestForeach {
    public static void main(String[] args) throws InterruptedException {

        long startMili = System.currentTimeMillis();// 当前时间对应的毫秒数
//        Thread.sleep(1000);  // out:1000

        //循环十万次
        Integer n = 0, k = 100000;
        while(--k > 0) {


            // out:170 ± 20
            for (int i = 0; i < 100; i++) {
                n++;
            }

            // out:100 ± 50
            for (int i = 1, j = 100; i <= 50 ; i++, j--) {
                n += i + j;
            }

            // out:50 ± 30
            for (int i = 1, j = 50, x = 51, y = 100; i <= 25; i++, x++, j--, y--) {
                n += i+j+x+y;
            }


        }
        long endMili = System.currentTimeMillis();
        System.out.println(endMili - startMili);

    }
}

三种遍历,本次实验是对1到100求和重复十万次,求总用时(毫秒)

1. i:1-100

for (int i = 0; i < 100; i++) //最常见的for遍历,经过多次测试,用时为170(±20)毫秒

2. i:1-50;   j:100-51

for (int i = 1, j = 100; i <= 50 ; i++, j--) //两个参数两头开功,多次测试,用时为100(±50)毫秒
3.i:1-25;   j:50-26;   x:51-75;   y:100-76

for (int i = 1, j = 50, x = 51, y = 100; i <= 25; i++, x++, j--, y--) //四个参数齐头并进,多次测试,用时为50(±30)

我本来预计两个参数是效率的峰值,跟我预计的不一样啊,结果是四个参数用时明显最少,往下大家可以自己在测试,反正验证网上的答案不对


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值