• 力扣:丑数II和数组中前K大的元素


    数组中的第K个元素

    在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

    示例 1:

    输入: [3,2,1,5,6,4] 和 k = 2
    输出: 5
    

    示例 2:

    输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
    输出: 4
    

    说明:

    你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。

    解析

    详细解析请看上一条博客,这个算是小顶堆的练习

    代码

    class Solution {
    public:
        int findKthLargest(vector<int>& nums, int k) {
            priority_queue<int,vector<int>,greater<int>> minheap; 
            for(auto x : nums){
                if(minheap.size()==k){
                    if(x<minheap.top()) continue;
                    minheap.pop();
                  
                }
                minheap.push(x);
            }
            return minheap.top();
        }
    };
    

    题目丑数II

    编写一个程序,找出第 n 个丑数。

    丑数就是只包含质因数 2, 3, 5 的正整数。

    示例:

    输入: n = 10
    输出: 12
    解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
    

    说明:

    1.1 是丑数。

    2.n 不超过1690。

    解析

    1. 新的丑数一定是在旧的丑数中产生的

    2. 所有的就丑数乘以权重2,3,5 最小的

    3. 如何确定谁乘以权重,三指针法应运而生

    4. 三指针idx[0]=0,idx[1]=0,idx[2]=0从头开始遍历丑数数组:

      1. 刚开始时数组的值为1;

      2. 12,13,1*5的最小值是2;新的丑数生成,idx[0]后移一位对应丑数数组的元素2;

      3. 22,13,1*5的最小值是3;新的丑数生成,idx[1]后移一位指向丑数数组2;一次类推

    5. 要使用三个并列的if让指针指向一个更大的数,不能用if-else。因为有这种情况:

      • 丑数6,可能由于丑数2乘以权重3产生;也可能由于丑数3乘以权重2产生。

      • 丑数10,... 等等。

    代码

    class Solution {
    public:
        int nthUglyNumber(int n) {
            vector<int> ugly(n,1),idx(3,0);
            for(int i=1;i<n;i++){
                int a = ugly[idx[0]] *2,b= ugly[idx[1]]*3,c= ugly[idx[2]]*5;
                int next = min(a,min(b,c));
                if(next == a) ++idx[0];
                if(next ==b) ++idx[1];
                if(next==c) ++idx[2];
                ugly[i]=next;
            }
            return ugly.back();
        }
    };
  • 相关阅读:
    swift-教你如何实现导航上的UISearchController动画效果。
    swift-自动计算字符串的宽高
    值得收藏--GitHub Top 20 开源项目
    swift-通知的基本使用
    swift-UITableView的基本使用
    绝对好用的浏览器json解析网址
    swift-正则验证手机号码
    swift-计算字符串长度
    swift-导航栏添加自定义返回按钮
    swift-UITextfield控件的基本属性设置
  • 原文地址:https://www.cnblogs.com/gzyc/p/10731592.html
Copyright © 2020-2023  润新知