Leetcode 第 382 场周赛题解

Leetcode 第 382 场周赛题解

  • Leetcode 第 382 场周赛题解
    • 题目1:3019. 按键变更的次数
      • 思路
      • 代码
      • 复杂度分析
    • 题目2:3020. 子集中元素的最大数量
      • 思路
      • 代码
      • 复杂度分析
    • 题目3:3021. Alice 和 Bob 玩鲜花游戏
      • 思路
      • 代码
      • 复杂度分析
    • 题目4:3022. 给定操作次数内使剩余元素的或值最小
      • 思路
      • 代码
      • 复杂度分析

Leetcode 第 382 场周赛题解

题目1:3019. 按键变更的次数

思路

双指针。

给你一个下标从 0 开始的字符串 s ,该字符串由用户输入。按键变更的定义是:使用与上次使用的按键不同的键。例如 s = “ab” 表示按键变更一次,而 s = “bBBb” 不存在按键变更。

返回用户输入过程中按键变更的次数。

注意:shift 或 caps lock 等修饰键不计入按键变更,也就是说,如果用户先输入字母 ‘a’ 然后输入字母 ‘A’ ,不算作按键变更。

使用双指针指向字符串中两个相邻的字符 s[i] 和 s[j](0<=i<j<s.length(),j=i+1),将它们先转为小写,再判断是否相等。若不相等,则计入按键变更;否则,不计入。一直遍历、判断到字符串末尾。

最后返回按键变更计数。

代码

/** @lc app=leetcode.cn id=100215 lang=cpp** [100215] 按键变更的次数*/// @lc code=start
class Solution
{
public:int countKeyChanges(string s){// 特判if (s.empty())return 0;int n = s.length();int count = 0;for (int i = 0, j = 1; i < n && j < n; i++, j++)if (tolower(s[i]) != tolower(s[j]))count++;return count;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n),其中 n 是字符串 s 的长度。

空间复杂度:O(1)。

题目2:3020. 子集中元素的最大数量

思路

用一个哈希表统计数组 nums 中的元素及其出现次数。

暴力枚举数组中的数,作为 x,然后不断看 x2,x4,⋯ 在数组中的个数。直到个数不足 2 个为止,退出循环。

注意模式的正中间的数字只取一个。如果最后 x 有一个,那么个数加一,否则个数减一。

注意特判 x=1 的情况。

代码

/** @lc app=leetcode.cn id=100206 lang=cpp** [100206] 子集中元素的最大数量*/// @lc code=start
class Solution
{
public:int maximumLength(vector<int> &nums){// 特判if (nums.empty())return 0;unordered_map<long long, int> cnt;for (int &num : nums)cnt[num]++;// 特判 x=1 的情况int ans = cnt[1] - (cnt[1] % 2 == 0);cnt.erase(1);for (auto &[num, _] : cnt){int res = 0;long long x;for (x = num; cnt.contains(x) && cnt[x] > 1; x *= x)res += 2;if (cnt.contains(x))res++;elseres--;ans = max(ans, res);}return ans;}
};
// @lc code=end

复杂度分析

时间复杂度:O(nloglogU),其中 n 为数组 nums 的长度,U=max⁡(nums)。

空间复杂度:O(n)。

题目3:3021. Alice 和 Bob 玩鲜花游戏

思路

数学。

Alice 和 Bob 在一个长满鲜花的环形草地玩一个回合制游戏。环形的草地上有一些鲜花,Alice 到 Bob 之间顺时针有 x 朵鲜花,逆时针有 y 朵鲜花。

游戏过程如下:

  1. Alice 先行动。
  2. 每一次行动中,当前玩家必须选择顺时针或者逆时针,然后在这个方向上摘一朵鲜花。
  3. 一次行动结束后,如果所有鲜花都被摘完了,那么当前玩家抓住对手并赢得游戏的胜利。

给你两个整数 n 和 m ,你的任务是求出满足以下条件的所有 (x, y) 对:

  • 按照上述规则,Alice 必须赢得游戏。
  • Alice 顺时针方向上的鲜花数目 x 必须在区间 [1,n] 之间。
  • Alice 逆时针方向上的鲜花数目 y 必须在区间 [1,m] 之间。

请你返回满足题目描述的数对 (x, y) 的数目。

显然,因为是 Alice 先行动,当 x+y 为奇数时,Alice 会摘完最后一朵鲜花,抓住对手并赢得游戏的胜利。

x+y 为奇数有两种情况:

  1. x 为奇数,y 为偶数
  2. x 为偶数,y 为奇数

在 [1,n] 区间内,有 n/2 个偶数,(n+1)/2 个奇数。

所以最终答案为 (n / 2) * ((m + 1) / 2) + ((n + 1) / 2) * (m / 2)。

更进一步,把这道题想象成一个网格。

在这里插入图片描述

枚举一下 x 和 y 的奇偶性,得出答案为 n*m/2。

代码

/** @lc app=leetcode.cn id=3021 lang=cpp** [3021] Alice 和 Bob 玩鲜花游戏*/// @lc code=start// 数学class Solution
{
public:long long flowerGame(int n, int m){return (long long)n * m / 2;}
};// Time Limit Exceeded// class Solution
// {
// public:
//     long long flowerGame(int n, int m)
//     {
//         long long count = 0;
//         for (int x = 1; x <= n; x++)
//             for (int y = 1; y <= m; y++)
//                 if ((x + y) ^ 0x1)
//                     count++;
//         return count / 2;
//     }
// };// class Solution
// {
// public:
//     long long flowerGame(int n, int m)
//     {
//         return (long long)(n / 2) * ((m + 1) / 2) +
//                (long long)((n + 1) / 2) * (m / 2);
//     }
// };
// @lc code=end

复杂度分析

时间复杂度:O(1)。

空间复杂度:O(1)。

题目4:3022. 给定操作次数内使剩余元素的或值最小

思路

位运算 + 试填法。

题解:试填法(Python/Java/C++/Go)

代码

/** @lc app=leetcode.cn id=3022 lang=cpp** [3022] 给定操作次数内使剩余元素的或值最小*/// @lc code=start
class Solution
{
public:int minOrAfterOperations(vector<int> &nums, int k){int ans = 0, mask = 0;// 从高位到低位一次枚举for (int b = 29; b >= 0; b--){mask |= 1 << b;int cnt = 0;// -1 在二进制下全为 1,所以可以省去特判每一段第一个数int and_res = -1;for (int &x : nums){and_res &= x & mask;if (and_res){// 合并 x,操作次数加一cnt++;}else{// 准备合并下一段,省去特判每一段的第一个数and_res = -1;}}if (cnt > k){ans |= 1 << b; // 答案的这个比特位必须是 1// 后面不考虑这个比特位,这一位一定为 1,消除这一位的影响mask ^= 1 << b;}}return ans;}
};
// @lc code=end

复杂度分析

时间复杂度:O(nlog⁡U),其中 n 为数组 nums 的长度,U=max⁡(nums)。

空间复杂度:O(1)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/459326.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文读懂|Apollo自动驾驶平台9.0全面解读

2023年12月19日&#xff0c;百度正式推出了Apollo开放平台的全新升级版本--Apollo开放平台9.0&#xff0c;面向所有开发者和生态合作伙伴&#xff0c;以更强的算法能力、更灵活易用的工具框架&#xff0c;以及更易拓展的通用场景能力&#xff0c;继续构筑自动驾驶开发的领先优势…

IDEA创建Java类时自动添加注释(作者、年份、月份)

目录 IDEA创建Java类时自动添加注释&#xff08;作者、年份、月份&#xff09;如图&#xff1a; IDEA创建Java类时自动添加注释&#xff08;作者、年份、月份&#xff09; 简单记录下&#xff0c;IDEA创建Java类时自动添加注释&#xff08;作者、年份、月份&#xff09;&#…

GetBilibiliVideo:一个下载B站视频的开源神器,让你轻松管理你的二次元世界。

正文&#xff1a; 引言 在广大ACG爱好者和内容创作者之间&#xff0c;哔哩哔哩&#xff08;Bilibili&#xff09;已经成为了不可或缺的视频分享与学习平台。为了满足用户对B站视频离线观看及备份的需求&#xff0c;我精心开发了一个名为 GetBilibiliVideo 的开源工具&#xf…

Airtest实现在手机界面快速批量采集数据

Airtest实现在手机界面快速批量采集数据 一、问题 Airtest使用的poco方法比较慢,寻找差不多一周,看完这篇文章能节省一周时间,希望帮到大家。二、解决思路 使用Airtest图像识别,这样就会速度上提升效率。 三、解决办法 使用页面规律,要找到每条数据的附近规律(一般是图…

精酿啤酒:使用全麦芽酿造的优点与挑战

全麦芽酿造是指使用全部麦芽而非仅使用部分麦芽进行啤酒酿造的过程。近年来&#xff0c;全麦芽酿造在啤酒行业中逐渐受到关注。对于Fendi Club啤酒来说&#xff0c;使用全麦芽酿造也带来了一些优点和挑战。 使用全麦芽酿造的优点首先体现在啤酒的口感和风味上。全麦芽含有更多的…

【iOS】——使用ZXingObjC库实现条形码识别并请求信息

文章目录 前言一、实现步骤二、扫描界面和扫描框的样式1.扫描界面2.扫描框 三、实现步骤 前言 ZXing库是一个专门用来解析多种二维码和条形码&#xff08;包括包括 QR Code、Aztec Code、UPC、EAN、Code 39、Code 128等&#xff09;的开源性质的处理库&#xff0c;而ZingObjC库…

CSS:九宫格布局

九宫格布局效果如下&#xff1a; HTML 结构&#xff1a; <div class"container"><div class"item">1</div><div class"item">2</div><div class"item">3</div><div class"item&q…

MPLS VPN功能组件(2)

MP-BGP 采用地址族(Address Family)来区分不同的网络层协议,以便正确处理VPN-IPv4路由 传统的BGP-4(RFC1771)只能管理IPv4的路由信息,无法正确处理地址空间重叠的VPN的路由。 为了正确处理VPN路由,VPN使用RFC2858(Multiprotocol Extensions for BGP-4)中规定的MP-BG…

DevOps落地笔记-21|业务价值:软件发布的最终目的

上一课时介绍如何度量软件的内部质量和外部质量。在外部质量中&#xff0c;我们提到用户满意度是衡量软件外部质量的关键因素。“敏捷宣言”的第一条原则规定&#xff1a;“我们最重要的目标&#xff0c;是通过持续不断的及早交付有价值的软件使用户满意”。从这一点也可以看出…

spring boot整合 cache 以redis服务 处理数据缓存 便捷开发

我们常规开发中 就是程序去数据库取数据 然后返回给客户端 但是 如果有些业务业务量非常庞大 不断访问数据库 性能就会非常糟糕 从而造成不好的用户体验 那么 我们自然就可以将数据查到缓存中 然后 用户访问 从缓存中取 这样就会大大提高用户的访问效率 之前 我的文章 java …

踩坑实录(Third Day)

临近年关&#xff0c;同事们该回家的也都回家了&#xff0c;所以我对工作的欲望不是很强烈&#xff0c;所以就主要是自己学习了一下&#xff0c;在 B 站看看视频&#xff0c;自己敲代码&#xff0c;所以今天没遇到什么坑&#xff0c;但是可以分享一下之前踩到的两个坑。 此为第…

svg基础(四)模式(<pattern>)点阵图,棋盘图,网格图,坐标图

<pattern> 1 定义 <pattern>标签用于定义以重复平铺方式填充对象的图形 2 语法 <patternpatternUnits"units to define x,y, width and height attributes."patternContentUnits"units to define co-ordinate system of contents of pattern…