首页 > 其他分享 >LeetCode -- 第 359 场周赛

LeetCode -- 第 359 场周赛

时间:2023-08-20 15:13:55浏览次数:32  
标签:周赛 nums -- res ++ int vector mp LeetCode

本题我们只需要将所有首字母取出来,并与s比较即可。

class Solution {
public:
    bool isAcronym(vector<string>& words, string s) {
        string res;
        for(auto &it: words) {
            res += it[0];
        }
        return res == s;
    }
};

 

 

 经典哈希表应用,我们要找n个不同的数字,且任意两个数组和不能为k。将i加入答案中同时将k - i加入到哈希表中即可。

class Solution {
public:
    int minimumSum(int n, int k) {
        vector<int> cnts;
        unordered_map<int, int> mp;
        
        
        for(int i = 1; ; i ++ ) {
            if(cnts.size() == n) break;
            if(mp[i] == 0) {
                cnts.push_back(i);
                mp[k - i] = 1;
            }
        }
        
        int res = 0;
        for(auto it: cnts) {
            res += it;
        }
        
        return res;
    }
};

 

 

 区间问题常见解法有动态规划,贪心。本题采用动态规划来解

f[i]表示只从前0 - i中选,所获得的最大价值。

若不选第i个点 f[i] = f[i - 1];若选di第i个点,则第i个点一定是某个区间的右端点,向前遍历其左端点j, f[i] = max(f[i], f[j - 1] + w)

class Solution {
public:
    int maximizeTheProfit(int n, vector<vector<int>>& offers) {
        int m = offers.size();
        vector<int> f(n + 1);
        vector<vector<int>> g(n);
        for(int i = 0; i < m; i ++ ) {
            g[offers[i][1]].push_back(i); //右端点处记录该段所在位置
        }
        for(int i = 1; i <= n; i ++ ) {
             f[i] = f[i - 1];
             for(int j: g[i - 1]) {
                 f[i] = max(f[i], f[offers[j][0]] + offers[j][2]); //之前的左端点 + 当前区间价值
             }
        }
        return f[n];
    }
};

 

 

 可以有计数 + 二分、计数+双指针两种解法

计数用来快速查找出两个相邻元素中其他元素数量

方法一、计数+二分

二分枚举最长长度,

class Solution {
public:
    int longestEqualSubarray(vector<int>& nums, int k) {
        int n = nums.size(), l = 0, r = n + 1;
        unordered_map<int, vector<int>> mp;
        for(int i = 0; i < n; i ++ ) {
            mp[nums[i]].push_back(i);
        }

        auto check = [&](int len) -> bool {
            for(auto &[_, vec]: mp) {
                for(int i = 0; i + len - 1 < vec.size(); i ++ ) {
                    if(vec[i + len - 1] - vec[i] + 1 - len <= k)
                        return true;
                }
            }
            return false;
        };

        while(l + 1 < r) {
            int mid = l + r >> 1;
            if(check(mid)) l = mid;
            else r = mid;
        }

        return l;
    }
};

 

方法二:计数+双指针

class Solution {
public:
    int longestEqualSubarray(vector<int>& nums, int k) {
        int n = nums.size();
        vector<vector<int>> p(n + 1);
        for(int i = 0; i < n; i ++ ) {
            p[nums[i]].push_back(i);
        }

        int res = 0;
        for(int u = 1; u <= n; u ++ ) {
            auto &q = p[u];
            for(int i = 0, j = 0; i < q.size(); i ++ ) {
                while((q[i] - q[j]) - (i - j) > k) j ++ ; //q[i] - q[j] + 1 两个相同元素中间元素个数 i - j + 1两个相同元素中间和该元素相同的元素个数
                res = max(res, i - j + 1);
            }
        }

        return res;
    }
};

 

标签:周赛,nums,--,res,++,int,vector,mp,LeetCode
From: https://www.cnblogs.com/zk6696/p/17644001.html

相关文章

  • PD
    PD TheCL/CVmodebitisonlyValidwhenoperatingasaProgrammablePowerSupplyandShallbeIgnoredotherwise.WhentheSourceisoperatingasaProgrammablePowerSupplytheCL/CVmodebitShallbesetwhenoperatinginCurrentLimitmode(CLmode)......
  • 第七章 Rocketmq--消息驱动
    7.1  MQ简介7.1.1什么是MQMQ(Message Queue)是一种跨进程的通信机制,用于传递消息。通俗点说,就是一个先进先出的数据结构。7.1.2MQ的应用场景7.1.2.1异步解耦此架构下注册、邮件、短信三个任务全部完成后,才返回注册结果到客户端,用户才能使用账号登录。但是对于用户来......
  • 创业公司如何选择管理系统?
    对于创业公司,既要控制成本,又需要简化管理,更需要一套高效且多功能整合的管理软件,来对企业运行中的数据、流程和信息沟通进行综合性管理。为应付随时可能出现的需求变化和扩展,软件的自定义能力和扩展性显得尤为重要。选择适合创业公司的管理软件可以帮助提高工作效率、组织协调和......
  • 某金融机构测试开发笔试题
    一、Linux笔试题1、什么是符号链接?如何创建符号链接?2、环境变量是什么?如何理解进程与环境变量的关系?3、如何查看文件的权限?文件权限信息的具体含义是什么?4、如何查看一个进程是否存在?如何杀掉一个进程?5、如何将进程放到后台执行并且重定向标准输出与错误输出?二、数据库数......
  • 如何快速在 Kubernetes 集群中新建用户
    如何快速在Kubernetes集群中新建用户Se7en 奇妙的Linux世界 2023-08-1911:59 发表于重庆收录于合集#Kubernetes274个#云原生261个#Docker197个#程序员421个公众号关注 「奇妙的Linux世界」设为「星标」,每天带你玩转Linux! Kubernetes中的用户K8S中......
  • [AGC031B] Reversi
    题目大意有一个长度为\(n\)的数列\(a\),你需要对其进行\(q\)次操作,操作有两种类型,按如下格式给出:1xy:将\(a_x\)变成\(y\);2lr:询问位置在\(\left[l,r\right]\)之间的不下降子串有多少个。思路考虑DP。考虑第\(i\)个石头,如果第\(i\)个石头不修改,方案数仍......
  • MySql Workbench 迁移工具 migration 提示缺少pyodbc 2.1.8 的解决方法
    想把公司的数据库转到MySQL,所以想装个MySQL测试,发现新版的MySQL(8.0.34)默认安装还是有不少问题,##一、譬如表、字段大小写的问题:lower_case_table_names=0--表名存储为给定的大小和比较是区分大小写的(linux默认)lower_case_table_names=1--表名存储在磁......
  • Jmeter中的ramp-up时间指的是什么?请举说明
    在JMeter中,ramp-up时间指的是测试中逐渐增加并发用户数的时间。它表示从测试开始到达最大并发用户数所需的时间。举例说明:假设我们需要对一个网站进行性能测试,设置最大并发用户数为100,并且希望在30秒内逐渐增加并发用户数。那么,ramp-up时间就是30秒。在测试开始时,JMeter会逐渐......
  • Unit 2
    Unit2MistaketoSuccessAFamousQuoteSuccessisgoingfromfailuretofailurewithoutlosingyourenthusiasm.——WinstonChurchill成功就是经历一次一次失败后,热情依旧。......
  • 数据倾斜问题
    数据倾斜的简介数据倾斜即单个节点任务处理的数据量远高于同类型任务处理的数据量,成为整个作业的性能瓶颈。本文将从产生数据倾斜的原因、不同计算引擎下的解决方法讨论。数据倾斜的场景和对应的解决方案Suffle过程数据倾斜和Suffle过程是密不可分的,Suffle过程在MR和Spark中......