• LeetCode第 319 场周赛题解


    2469. 温度转换

    在这里插入图片描述
    模拟

    class Solution {
    public:
        vector<double> convertTemperature(double celsius) {
            return {celsius+273.15,celsius*1.8+32};
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2470. 最小公倍数为 K 的子数组数目

    在这里插入图片描述
    时间复杂度 n 2 n^2 n2完全足够。
    公式:x=x*nums[j]/gcd(x,nums[j]);

    class Solution {
    public:
        int subarrayLCM(vector<int>& nums, int k) {
            int n=nums.size();
            int res=0;
            for(int i=0;i<n;i++)
            {
                int x=nums[i];
                for(int j=i;j<n;j++)
                {
                    x=x*nums[j]/gcd(x,nums[j]);
                    if(x==k)res++;
                    else if(x>k)break;
                }
            }
            return res;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    2471. 逐层排序二叉树所需的最少操作数目

    在这里插入图片描述
    在这里插入图片描述
    本题考查置换环
    如何构建环?
    比如该数组为
    [7,6,8,5]
    [5,6,7,8]<—排好序
    将上下两个点相连,每一个环内是需要交换的,交换次数为环的大小减1
    个人感觉并查集比较方便:前置知识:并查集求集合中点的个数

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
     *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
     *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
     * };
     */
    #define x first
    #define y second
    typedef pair<int,int>PII; 
    class Solution {
    public:
        static const int N=1e5+10;
        int f[N],cnt[N];
        int find(int x)
        {
            if(x!=f[x])f[x]=find(f[x]);
            return f[x];
        }
        void unite(int x,int y)
        {
            int a=find(x),b=find(y);
            if(a!=b)
            {
                cnt[a]+=cnt[b];
                f[b]=a;
            }
        }
        int bfs(TreeNode *root)
        {
            queue<TreeNode*>q;
            q.push(root);
            int res=0;
            while(q.size())
            {
                int sz=q.size();
                vector<int>v;
                for(int i=0;i<sz;i++)
                {
                    auto t=q.front();
                    q.pop();
                    v.push_back(t->val);
                    if(t->left)q.push(t->left);
                    if(t->right)q.push(t->right);
                }
                vector<PII>p;
                for(auto x:v)p.push_back({0,x});
                sort(v.begin(),v.end());
                for(int i=0;i<v.size();i++)p[i].x=v[i];
                for(auto x:p)unite(x.x,x.y);
                for(auto x:p)
                    if(f[x.x]==x.x)
                        res+=cnt[x.x]-1;
            }
            return res;
        }
        int minimumOperations(TreeNode* root) {
            for(int i=0;i<N;i++)f[i]=i,cnt[i]=1;
            return bfs(root);
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65

    2472. 不重叠回文子字符串的最大数目

    在这里插入图片描述
    字符串哈希便与o(1)查看该子串是否为回文串,贪心枚举一下最多有多少个区间即可。

    const int N=2010,base=131;
    typedef unsigned long long ull;
    typedef pair<int,int>PII;
    #define x first
    #define y second
    class Solution {
    public:
        ull p[N],h1[N],h2[N];
        ull get1(int l,int r)
        {
            return h1[r]-h1[l-1]*p[r-l+1];
        }
        ull get2(int l,int r)
        {
            return h2[r]-h2[l-1]*p[r-l+1];
        }
        int maxPalindromes(string s, int k) {
            int n=s.size();
            vector<PII>v;
            string s1=s;
            reverse(s.begin(),s.end());
            string s2=s;
            s1=" "+s1,s2=" "+s2;
            p[0]=1;
            for(int i=1;i<=n;i++)
            {
                p[i]=p[i-1]*base;
                h1[i]=h1[i-1]*base+s1[i];
            }
            for(int i=1;i<=n;i++)
                h2[i]=h2[i-1]*base+s2[i];
            for(int len=k;len<=n;len++)
            {
                for(int l=1;l+len-1<=n;l++)
                {
                    int r=l+len-1;
                    if(get1(l,r)==get2(n-r+1,n-l+1))v.push_back({l,r});
                }
            }
            sort(v.begin(),v.end(),[&](PII a,PII b){
                return a.y<b.y;
            });
            int res=0;
            int ed=-2e9;
            for(int i=0;i<v.size();i++)
            {
                if(ed<v[i].x)
                {
                    res++;
                    ed=v[i].y;
                }
            }
            return res;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
  • 相关阅读:
    计算机网络面试题【面试】
    动态规划——474. 一和零
    前端 JavaScript 数组相关知识点有哪些?
    常用本地事务和分布式事务解决方案模型
    2022保研夏令营/预推免记录:浙大计院直博/西湖电子直博/南大软院/厦大信院
    李宏毅《机器学习》丨7. Conclusion(总结)
    【golang】json数据解析 - 嵌套json解析
    不同类型时间戳
    Linux安装Chrome浏览器 -linux安装choeme
    DT灯光基础(辉光 雾 阴影 渲染选项)
  • 原文地址:https://blog.csdn.net/qq_52765554/article/details/127875665