第k个数--0928

 有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。

class Solution {
public:
    int getKthMagicNumber(int k) {
        vector factors = {3, 5, 7};
        unordered_set seen;
        priority_queue, greater> heap;
        seen.insert(1L);
        heap.push(1L);
        int magic = 0;
        for (int i = 0; i < k; i++) {
            long curr = heap.top();
            heap.pop();
            magic = (int)curr;
            for (int factor : factors) {
                long next = curr * factor;
                if (!seen.count(next)) {
                    seen.insert(next);
                    heap.push(next);
                }
            }
        }
        return magic;
    }
};

vector:封装动态数组大小的容器。

set:有序集合
unordered_set :可直译为“无序 set 容器”,即 unordered_set 容器和 set 容器很像,唯一的区别就在于 set 容器会自行对存储的数据进行排序,而 unordered_set 容器不会。

priority:优先队列,优先级高的最先出队。默认优先级最大值优先。

                 定义模板:priority_queue<数据类型,vector<数据类型>,greater> heap;

set插入元素:insert()

priority插入队列:push()

priority去队首:top()

priority出队列:pop()

vector的count函数:返回符合条件的元素个数

1L:相等于int类型的数字1

for(数据类型 数组名称单数 :数组名称):遍历该数组

你可能感兴趣的:(java,算法,c++)