第k个数

来源:互联网 发布:c 数组截断 编辑:程序博客网 时间:2024/06/06 09:29

题目描述

有一些数的素因子只有3、5、7,请设计一个算法,找出其中的第k个数。
给定一个数int k,请返回第k个数。保证k小于等于100。
测试样例:

算法:
使用3个队列分别保存着3的倍数,5的倍数,7的倍数。每次循环找到当前队头即最小值,这个值就是第n个所求数。
这个值出自哪个队列x,说明现在3个队列内的所有数的最小数是x的倍数,那么需要将所有队头继续扩大x倍,因为x倍的数最小了

key:3可以乘3,5,7队列,5可以乘5,7队列,7可以乘7队列。因为3乘了5,5就不需要乘3了

class KthNumber {public:    int findKth(int k) {        // write code here        queue<int> que3;        queue<int> que5;        queue<int> que7;        //init        que3.push(3);        que5.push(5);        que7.push(7);        //begin        int count = 0;        int key = 0;        while (count < k){            int key3,key5,key7;            if(!que3.empty()){                key3 = que3.front();            }            else                key3 = INT_MAX;            if(!que5.empty()){                key5 = que5.front();            }            else                key5 = INT_MAX;            if(!que7.empty()){                key7 = que7.front();            }            else                key7 = INT_MAX;            key = min(min(key3,key5),key7);            if(key == key3){                que3.push(key * 3);                que5.push(key * 5);                que7.push(key * 7);                que3.pop();            }            else if(key == key5){                que5.push(key * 5);                que7.push(key * 7);                que5.pop();            }            else{                que7.push(key * 7);                que7.pop();            }            count++;        }        return key;    }};
0 0
原创粉丝点击