剑指offer--33.丑数

本文提供了一种使用优先队列解决寻找第N个丑数的方法。丑数是指仅包含质因子2、3和5的正整数。通过定义一个类Solution并实现GetUglyNumber_Solution函数,采用优先队列高效地找到第N个丑数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本来用数组做标志位,但是测试数据有第1500个,859963392,惹不起哦

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

时间限制:1秒 空间限制:32768K 热度指数:238729
本题知识点:  数组

题目描述

把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
class Solution {
public:
    int GetUglyNumber_Solution(int n) {
        if(n < 7) return n;
        int ct = 0;
        unsigned long flag;
        priority_queue<unsigned long, vector<unsigned long>, greater<unsigned long>> Q;
        Q.push(1);
        while(ct < n-1) {
            unsigned long tmp = Q.top();Q.pop();
            if(tmp == flag) {
                continue;
            }else ct++;
            flag = tmp;
            Q.push(tmp*2),Q.push(tmp*3),Q.push(tmp*5); 
        }
        while(flag == Q.top())Q.pop();
        return Q.top();
    }
};

 

转载于:https://www.cnblogs.com/evidd/p/10625404.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值