成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

264. Ugly Number II & 313. Super Ugly Number

hiyang / 2941人閱讀

摘要:每次出一個數(shù),就把這個數(shù)的結(jié)果都放進去。,指針從個變成個。的做法參考還是復雜度的問題,回頭再看看

264. Ugly Number II

題目鏈接:https://leetcode.com/problems...

dp的方法參考discussion:
https://discuss.leetcode.com/...

dp的subproblem是:dp[i]: i-th ugly number
dp的function是:dp[i] = min(dp[t2] * 2, dp[t3] * 3, dp[t5] * 5)
其中,t2-1, t3-1, t5-1分別為上一個*2, *3, *5得到的丑數(shù),所以當前dp[t2]*2, dp[t3]*3, dp[t5]*5分別表示當前由*2, *3, *5得到的最小丑數(shù)

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

標簽還寫了heap,比較明顯的greedy做法,用一個min heap,top存的是當前最小的丑數(shù),poll出n-1個數(shù),最后top就是第n個丑數(shù)。每次poll出一個數(shù),就把這個數(shù)*2, *3, *5的結(jié)果都放進去。這個復雜度不太確定,回頭再看看。注意去重,因為乘2,乘3最后會導致一個結(jié)果出現(xiàn)多次,還有最后存的結(jié)果可能overflow,所以用long來處理,參考discussion:
https://discuss.leetcode.com/...

public class Solution {
    public int nthUglyNumber(int n) {
        if(n == 0) return 0;
        if(n == 1) return 1;
        
        PriorityQueue minHeap = new PriorityQueue();
        minHeap.offer(1L);
        for(int i = 1; i < n; i++) {
            long cur = minHeap.poll();
            // remove duplication
            while(!minHeap.isEmpty() && minHeap.peek() == cur) minHeap.poll();
            minHeap.add(cur*2);
            minHeap.add(cur*3);
            minHeap.add(cur*5);
        }
        return minHeap.poll().intValue();
    }
}
313. Super Ugly Number

題目鏈接:https://leetcode.com/problems...

和上一題的方法是一樣的,只不過這里把2,3,5變成了給的primes數(shù)組里的數(shù)。
dp,index指針從3個變成len(primes)個。

public class Solution {
    public int nthSuperUglyNumber(int n, int[] primes) {
        if(n == 0) return 0;
        if(n == 1) return 1;
        // dp[i]: i-th ugly number
        int[] dp = new int[n];
        int m = primes.length;
        // index[i]: ugly number producted by primes[i]
        int[] index = new int[m];
        dp[0] = 1;
        for(int i = 1; i < n; i++) {
            dp[i] = Integer.MAX_VALUE;
            for(int j = 0; j < m; j++) dp[i] = Math.min(dp[i], primes[j]*dp[index[j]]);
            
            // update index points
            for(int j = 0; j < m; j++) {
                if(dp[i] == dp[index[j]] * primes[j]) index[j]++;
            }
        }
        
        return dp[n-1];
    }
}

heap+dp的做法參考discussion:
https://discuss.leetcode.com/...

還是復雜度的問題,回頭再看看

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69877.html

相關文章

  • 264. Ugly NumberII &amp; 313. Super Ugly Number

    摘要:題目解答這個問題最主要的就是如果按順序找出那么我們?nèi)绻芟氲桨岩詾橐蜃拥倪@些分成三個然后在每次輸出時取里最小的那個數(shù)輸出就可以解決了。 264 Ugly NumberII題目:Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime factors only i...

    Lionad-Morotar 評論0 收藏0
  • leetcode263,264,313 ugly numbers

    摘要:這題可以使用暴力遍歷法,從開始,對每一個數(shù)都進行判斷,直到找到第個丑數(shù)為止。優(yōu)先隊列可以很好的滿足該情況。因此每個素數(shù)持有的信息包括當前對應的丑數(shù)的下標。 前言 這一篇博客把ugly numbers系列的題目做一個整理。這三道題正好是一個思路的循序漸進,所以放在一篇博客當中。 Ugly Number Write a program to check whether a given nu...

    everfly 評論0 收藏0
  • Leetcode[313] Super Ugly Number

    摘要:滾動求最大值復雜度考慮一個,的值是下一個可能的替補值。思路數(shù)組中保存的是之前保留到的值,因為下一個可能的值是和之前的值的倍數(shù)關系。 Leetcode[313] Super Ugly Number Write a program to find the nth super ugly number. Super ugly numbers are positive numbers whos...

    Aklman 評論0 收藏0
  • leetcode-313-Super Ugly Number

    摘要:題意找出以某些數(shù)為公因數(shù)的遞增排序的第個數(shù)條件維護了的元素的相乘因素的。由于是最小值,所以每次保留最小的。問題轉(zhuǎn)化,多次迭代,變成,處理對象變了。不重復的思想找出重復計算的地方,找出不重復計算的方法,用極值約束,加以記錄。 題意:找出以某些數(shù)為公因數(shù)的 遞增排序的第n個數(shù) 條件:indexes 維護了 primes的元素的相乘因素(uglies)的index。 思路:每次從 prim...

    張春雷 評論0 收藏0
  • [LintCode/LeetCode] Super Ugly Number

    摘要:建兩個新數(shù)組,一個存數(shù),一個存。數(shù)組中所有元素初值都是。實現(xiàn)的過程是,一個循環(huán)里包含兩個子循環(huán)。兩個子循環(huán)的作用分別是,遍歷數(shù)組與相乘找到最小乘積存入再遍歷一次數(shù)組與的乘積,結(jié)果與相同的,就將加,即跳過這個結(jié)果相同結(jié)果只存一次。 Problem Write a program to find the nth super ugly number. Super ugly numbers a...

    wuyumin 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<