ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

leetcode264-丑数 II

2022-08-19 10:34:20  阅读:129  来源: 互联网

标签:丑数 arr set ++ res leetcode264 II int 指针


丑数 II

  • 优先队列

维护一个优先队列。先取出最小的数字,将其乘以2、3、5,如果发现没有重复的话就装入优先队列中,需要用到set进行去重。

class Solution {
    public int nthUglyNumber(int n) {
        Set<Long> set = new HashSet<>();
        PriorityQueue<Long> queue = new PriorityQueue<>();
        long res = 0, arr[] = new long[]{2, 3, 5};
        queue.offer(1L);
        set.add(1L);
        for(int i = 0; i < n; i++){
            res = queue.poll();
            for(long val : arr){
                if(set.add(res*val))    queue.offer(res*val);
            }
        }
        return (int)res;
    }
}
  • dp

维护一个dp数组和三个指针,分别代表2、3、5的当前位置。最新的值为2、3、5指针指向的数乘以相应的常数,取最小值。
然后对如果最新的值等于该指针乘以常数的话,就将该指针移动相应位置。(注意,一轮下来可能移动多个指针,这是因为三个指针得到的数字可能相等)

class Solution {
    public int nthUglyNumber(int n) {
        int arr[] = new int[n], i2 = 0, i3 = 0, i5 = 0;
        arr[0] = 1;
        for(int i = 1; i < n; i++){
            arr[i] = Math.min(arr[i2]*2, Math.min(arr[i3]*3, arr[i5]*5));
            if(arr[i] == arr[i2]*2) i2++;
            if(arr[i] == arr[i3]*3) i3++;
            if(arr[i] == arr[i5]*5) i5++;
        }
        return arr[n-1];
    }
}

标签:丑数,arr,set,++,res,leetcode264,II,int,指针
来源: https://www.cnblogs.com/xzh-yyds/p/16601125.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有