阿里巴巴2018秋招提前批Android开发编程测试题
题目描述:
启动速度时APP的核心内容但在超级APP中经常出现由于启动任务繁多导致启动速度慢的问题。因此我们尝试通过并行启动任务加快启动速度。假设启动任务都是独立的,并且多线程并行执行,那么恰定一组正整数(<=50)个表示一组任务,每个数字表示启动任务耗时,所有的耗时之和(<10000),请算出该组任务的所需的最短耗时。
输入
11
1 10 100 200 50 90 30 20 10 27 57
输出
298
。。。。。。。。。。。。。。。。。。
题目分析:
题目要求所需时间最短,抛开这些文字,看题目的输入输出,先对这串数据进行排序{1,10,10,20,27,30,50,57,90,100,200}.
我们创建两个线程a,b;
首先把最大的两个数分别放入a,b中,此时a=200,b=100,
200>100,所以90放入b中,a=200,b=100+90=190;
200>190, 所以57放入b中,a=200,b=190+57=247;
200<247,所以50放入a中,a=200+50=250,b=247;
250>247,所以30放入b中,a=250,b=247+30=277;
250<277,所以27放入a中,a=250+27=277,b=277;
277=277,所以20放入a,b都可以,假设放入a,a=277+20=297,b=277;
297>277,所以下来的两个10都要放入b中,a=297,b=277+10+10=297;
此时297=297,最后一个1随便放,即为最终答案。
现在我们回过头来发现这道题其实非常简单了吧!至于a和b是两个整形数还是两个容器,还是两个栈,看大家爱好了!
直接上代码。