题解 | 丑数

丑数

https://www.nowcoder.com/practice/6aa9e04fc3794f68acf8778237ba065b

#include <algorithm>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param index int整型 
     * @return int整型
     */
    int GetUglyNumber_Solution(int index) {
        if(index == 0) return 0;
        vector<int> num2;
        vector<int> num3;
        vector<int> num5;
        int index2 = 0 ,index3 = 0, index5 = 0;
        int res = 1;
        for(int i = 1 ; i < index; i ++){
            num2.push_back(res *2) ;
            num3.push_back(res *3);
            num5.push_back(res *5);
            int min2 = num2[index2];
            int min3 = num3[index3];
            int min5 = num5[index5];
            int minNum = min (min(min2,min3),min5);
            if(minNum == min2) index2++;
            if(minNum == min3) index3++;
            if(minNum == min5) index5++;
            res = minNum;
        }
        return res;
    }
};

全部评论
需要设置三个队列,和一个最小值作为结果 求下一个最小值过程为: 首先将这个最小值分别和这三个相乘再分别入队, 然后再从这三个队列的队首找下一个最小值,找到了则对应指针后移一位 重复直至找到第n个最小值 这个算法的核心在于,这三个队列的入队方式决定其天然就是有序的。所以只需要比较对首就能找到这三个队列中的最小值。
点赞 回复 分享
发布于 04-11 11:09 上海

相关推荐

野猪不是猪🐗:我assume that你must技术aspect是solid的,temperament也挺good的,however面试不太serious,generally会feel style上不够sharp
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务