• leetcode 第 221 场周赛


    5637. 判断字符串的两半是否相似

    题意

    如果字符串的两半相似,则两半拥有的元音字母个数应该相同

    class Solution {
    public:
        int count(string s){
            int res=0;
            set<char>S({'a','e','i','o','u'});
            for(auto c:s){
                auto x = tolower(c);
                if(S.count(x)){
                    res++;
                }
            }
            return res;
        }
        bool halvesAreAlike(string s) {
            int n=s.length()/2;
            return count(s.substr(0,n))==count(s.substr(n));
        }
    };
    

    5638. 吃苹果的最大数目

    题意

    一颗苹果树,每天都可以长出若干苹果,每天长出的苹果保质期不同,每天最多只能吃一个苹果,求最多可以吃到的苹果数量

    思路

    优先吃保质期最短的苹果,用小根堆进行维护

    
    class Solution {
    public:
        typedef pair<int,int> pii;
        int eatenApples(vector<int>& a, vector<int>& d) {
            int n=a.size();
            priority_queue<pii,vector<pii>,greater<pii>>q;//小根堆
            q.push({d[0],a[0]});
            int i=0,ans=0;
            while(!q.empty() || i<n){
                while(!q.empty()&&(q.top().first<=i || q.top().second<=0)) q.pop(); //将已经坏掉的苹果淘汰
                if(!q.empty()){
                    pii p=q.top();
                    q.pop();
                    ans++;
                    p.second--;
                    if(p.second>0) q.push(p);//如果还有可以吃的苹果,加入堆
                }
                i++;
                if(i<n) q.push({i+d[i],a[i]});
            }
            return ans;
        }
    };
    

    5210. 球会落何处

    题意

    一个n*m的网格,向网格中都放置一个隔板,值为1的为主对角线隔板,为-1的是副对角线隔板,在第0行的每一列都放置一个小球,若小球能从最后一行出来输出列值,不能则输出-1

    思路

    先排除不能下来的情况,剩下的深搜即可

    class Solution {
    public:
        int n,m;
        int dfs(vector<vector<int>>&g,int x,int y){
            if(y==0&&g[x][y]==-1) return -1;
            if(y==n-1&&g[x][y]==1) return -1;
            if(g[x][y]==1&&g[x][y+1]==-1) return -1;
            if(g[x][y]==-1&&g[x][y-1]==1) return -1;
            g[x][y]==1?y=y+1:y=y-1;
            if(x==m-1) return y;
            return dfs(g,x+1,y);
        }
        vector<int> findBall(vector<vector<int>>& grid) {
            m=grid.size();
            n=grid[0].size();
            vector<int>ans;
            for(int i=0;i<n;i++){
                ans.push_back(dfs(grid,0,i));
            }
            return ans;
        }
    };
    

    5640. 与数组中元素的最大异或值

    题意

    有一个nums数组,有q组询问,每组询问包括两个值,一个为x,一个为m,求nums数组中不大于m的元素和x异或的最大值

    思路

    有点乱,待更新

    struct node{
        int x,m,k;//k表示索引
        bool operator < (const node& t) const{
            return m<t.m;
        }
    }q[100010];
    int son[3100000][2];
    
    class Solution {
    public:
        int idx=0;
        void insert(int x){  //插入
            int p=0;
            for(int i=30;i>=0;i--){
                int u=x>>i&1;
                if(!son[p][u]) son[p][u]=++idx;
                p=son[p][u];
            }
        }
        int search(int x){  //查找
            if(!idx) return -1;
            int p=0,res=0;
            for(int i=30;i>=0;i--){
                int u= !(x>>i&1);
                if(son[p][u]) p=son[p][u],res=res*2+1;
                else p=son[p][!u],res=res*2;
            }
            return res;
        }
        vector<int> maximizeXor(vector<int>& nums, vector<vector<int>>& queries) {
            idx=0;
            memset(son,0,sizeof(son));
            int n=nums.size(),m=queries.size();
            for(int i=0;i<m;i++){
                q[i]={queries[i][0],queries[i][1],i};
            }
            sort(nums.begin(),nums.end());
            sort(q,q+m);
            vector<int>res(m);
            for(int i=0,j=0;j<m;j++){
                while(i<n&&nums[i]<=q[j].m) insert(nums[i++]);
                res[q[j].k]=search(q[j].x);
            }
            return res;
        }
    };
    
    
    七月在野,八月在宇,九月在户,十月蟋蟀入我床下
  • 相关阅读:
    微信Web开发者工具 移动调试 手机连接不上
    js 生成guid 自定义函数
    json
    c# 返回时间差
    Quartz.Net和队列应用demo
    数据库字段数字表示含义的枚举维护
    API文档自动生成,Swagger的配置
    请求资源文件报500错误
    文件上传三:base64文件上传
    文件上传二:FormData上传
  • 原文地址:https://www.cnblogs.com/voids5/p/14198015.html
Copyright © 2020-2023  润新知