本文主要是介绍264. 丑数 II 最小堆或者是三指针,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
思路
和”面试题 17.09. 第 k 个数 最小堆或者是三指针“一样。
代码
class Solution {
public:// int nthUglyNumber(int n) {// // 指示所有乘以2,3,5得到的数字// int k1=0,k2=0,k3=0;// vector<int>vs(n+1);// vs[0]=1;// int minn=1;// for(int i=1;i<n;i++){// minn=vs[i]=min(min(vs[k1]*2,vs[k2]*3),vs[k3]*5);// // cout<<minn<<endl;// if(minn==vs[k1]*2){// k1++;// 取下一个数字// }// if(minn==vs[k2]*3){// k2++;// 取下一个数字// }// if(minn==vs[k3]*5){// k3++;// 取下一个数字// }// }// return minn;// }typedef long long ll;int nthUglyNumber(int n) {// 指示所有乘以2,3,5得到的数字priority_queue<ll,vector<ll>,greater<ll> >q;q.push(1);ll res=1;ll cnt=1;while(cnt<n){cnt++;res=q.top();q.pop();while(!q.empty()&&res==q.top()){q.pop();}q.push(res*2);q.push(res*3);q.push(res*5);}res=q.top();return (int)res;}
};
这篇关于264. 丑数 II 最小堆或者是三指针的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!