经典指数          
原因
2166
浏览数
0
收藏数
 

一个文件里有10万个随机正整数,按照以下规则能组合出一份新的数据: A. 如果当前数字能被3整除,那么它和文件中所有数字(包括自己)两两相加后生成一组数字替代自己的位置。 B. 如果不能被3整除,则它只需要乘以二,生成一个数字替代自己的位置。 例如:[3,7,6] 会组合出[6,10,9,14,9,13,12] 再如:[5,12,9,6,2]会组合出[10,17,24,21,18,14,14,21,18,15,11,11,18,15,12,8,4] 写一个程序找出并打印出新数据的最小的前200个数字。请考虑优化算法复杂度。

     举报   纠错  
 
切换
1 个答案

话说可以如下处理么?

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

01.首先第一次遍历取出    

        不是3的倍数的最小的200个元素值     【堆1】

           是3的倍数的最小的200个元素值      【堆2】

02.新建一个【堆3】  与  【堆1】 对应,存储的数值是【堆1】 的各项数值的2倍

         【堆1】,【堆2】 排好序,然后将 【2】 中元素(3的倍数值)插入到 【1】中

          从【2】 中(3的倍数集合)依次从小到大取值,然后与 【1】 中的各项数值相加计算结果【sum】。

                  a. 如果【堆3】没满,将【sum】放入【堆3】末尾,更新【堆3】。

                 

b. 如果【堆3】已满,同时【sum】小于【堆3】堆顶元素,将【堆3】堆顶元素更改为【sum】,调整【堆3】。

                  c. 如果【堆3】已满,同时【sum】大于堆顶元素,跳出内循环......

03.最后【堆3】排序,然后输出【堆3】。

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

 
切换
撰写答案