当前位置: 首页 > news >正文

Leetcode 第 372 场周赛题解

Leetcode 第 372 场周赛题解

  • Leetcode 第 372 场周赛题解
    • 题目1:2937. 使三个字符串相等
      • 思路
      • 代码
      • 复杂度分析
    • 题目2:2938. 区分黑球与白球
      • 思路
      • 代码
      • 复杂度分析
    • 题目3:2939. 最大异或乘积
      • 思路
      • 代码
      • 复杂度分析
    • 题目4:2940. 找到 Alice 和 Bob 可以相遇的建筑
      • 思路
      • 代码
      • 复杂度分析

Leetcode 第 372 场周赛题解

题目1:2937. 使三个字符串相等

思路

枚举。

设 len1、len2、len3 分别为字符串 s1、s2、s3 的长度。

min_len 是 3 个字符串长度的最小值。

枚举 len = min_len 到 len = 1,设 t1、t2、t3 分别是字符串 s1、s2、s3 的从 0 开始、长度为 len 的子串。

如果 t1 == t2 == t3,说明可以通过操作(选择其中一个长度至少为 2 的字符串并删除其最右位置上的字符)使这三个字符串相等,最小操作次数 = len1 + len2 + len3 - 3 * len。

否则,返回 -1。

代码

/** @lc app=leetcode.cn id=2937 lang=cpp** [2937] 使三个字符串相等*/// @lc code=start
class Solution
{
public:int findMinimumOperations(string s1, string s2, string s3){int len1 = s1.length(), len2 = s2.length(), len3 = s3.length();int min_len = min(len1, min(len2, len3));for (int len = min_len; len >= 1; len--){string t1 = s1.substr(0, len), t2 = s2.substr(0, len), t3 = s3.substr(0, len);if (t1 == t2 && t2 == t3)return len1 + len2 + len3 - 3 * len;}return -1;}
};
// @lc code=end

复杂度分析

时间复杂度:O(min_len),其中 min_len 为三个字符串中的最短字符串的长度。

空间复杂度:O(1)。

题目2:2938. 区分黑球与白球

思路

贪心。

类似于冒泡排序的思想,把 ‘0’ 挪到相应的位置。

一次遍历,累加操作次数。

示例:

在这里插入图片描述

代码

/** @lc app=leetcode.cn id=2938 lang=cpp** [2938] 区分黑球与白球*/// @lc code=start
class Solution
{
public:long long minimumSteps(string s){int white = 0;long long steps = 0;for (int i = 0; i < s.length(); i++){if (s[i] == '0'){steps += (long long)(i - white);white++;}}return steps;}
};
// @lc code=end

另解:操作次数 = Σ(每个 ‘0’ 左边的 ‘1’ 的个数)。

代码:

/** @lc app=leetcode.cn id=2938 lang=cpp** [2938] 区分黑球与白球*/// @lc code=start
// class Solution
// {
// public:
//     long long minimumSteps(string s)
//     {
//         int white = 0;
//         long long steps = 0;
//         for (int i = 0; i < s.length(); i++)
//         {
//             if (s[i] == '0')
//             {
//                 steps += (long long)(i - white);
//                 white++;
//             }
//         }
//         return steps;
//     }
// };class Solution
{
public:long long minimumSteps(string s){int black = 0;long long steps = 0;for (int i = 0; i < s.length(); i++){if (s[i] == '0')steps += black;elseblack++;}return steps;}
};
// @lc code=end

复杂度分析

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

空间复杂度:O(1)。

题目3:2939. 最大异或乘积

思路

位运算。

题解:O(1) 做法!位运算的巧妙运用!(Python/Java/C++/Go)

代码

/** @lc app=leetcode.cn id=2939 lang=cpp** [2939] 最大异或乘积*/// @lc code=start
class Solution
{
public:int maximumXorProduct(long long a, long long b, int n){if (a < b){swap(a, b); // 保证 a >= b}long long mask = (1LL << n) - 1;long long ax = a & ~mask; // 第 n 位及其左边,无法被 x 影响,先算出来long long bx = b & ~mask;a &= mask; // 低于第 n 位,能被 x 影响b &= mask;long long left = a ^ b;      // 可分配:a XOR x 和 b XOR x 一个是 1 另一个是 0long long one = mask ^ left; // 无需分配:a XOR x 和 b XOR x 均为 1ax |= one;                   // 先加到异或结果中bx |= one;// 现在要把 left 分配到 ax 和 bx 中// 根据基本不等式(均值定理),分配后应当使 ax 和 bx 尽量接近,乘积才能尽量大if (left > 0 && ax == bx){// 尽量均匀分配,例如把 1111 分成 1000 和 0111long long high_bit = 1LL << (63 - __builtin_clzll(left));ax |= high_bit;left ^= high_bit;}// 如果 a & ~mask 更大,则应当全部分给 bx(注意最上面保证了 a>=b)bx |= left;const long long MOD = 1'000'000'007;return ax % MOD * (bx % MOD) % MOD; // 注意不能直接 LL * LL,否则溢出}
};
// @lc code=end

复杂度分析

时间复杂度:O(1)。

空间复杂度:O(1)。

题目4:2940. 找到 Alice 和 Bob 可以相遇的建筑

思路

题解:两种方法:离线+最小堆/在线+线段树二分(Python/Java/C++/Go)

代码

class Solution {
public:vector<int> leftmostBuildingQueries(vector<int> &heights, vector<vector<int>> &queries) {vector<int> ans(queries.size(), -1);vector<vector<pair<int, int>>> left(heights.size());for (int qi = 0; qi < queries.size(); qi++) {int i = queries[qi][0], j = queries[qi][1];if (i > j) {swap(i, j); // 保证 i <= j}if (i == j || heights[i] < heights[j]) {ans[qi] = j; // i 直接跳到 j} else {left[j].emplace_back(heights[i], qi); // 离线}}priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> pq;for (int i = 0; i < heights.size(); i++) { // 从小到大枚举下标 iwhile (!pq.empty() && pq.top().first < heights[i]) {ans[pq.top().second] = i; // 可以跳到 i(此时 i 是最小的)pq.pop();}for (auto &p: left[i]) {pq.emplace(p); // 后面再回答}}return ans;}
};

复杂度分析

时间复杂度:O(n+qlog⁡q),其中 n 为 heights 的长度,q 为 queries 的长度。
空间复杂度:O(n+q)。

相关文章:

Leetcode 第 372 场周赛题解

Leetcode 第 372 场周赛题解 Leetcode 第 372 场周赛题解题目1&#xff1a;2937. 使三个字符串相等思路代码复杂度分析 题目2&#xff1a;2938. 区分黑球与白球思路代码复杂度分析 题目3&#xff1a;2939. 最大异或乘积思路代码复杂度分析 题目4&#xff1a;2940. 找到 Alice 和…...

mysql查询统计最近12个月的数据

项目场景&#xff1a; mysql查询统计最近12个月的数据&#xff0c;按每个月纵向展示&#xff0c;效果图 sql语句 注意&#xff1a;count( v.uuid ) 这里的是被统计那张表的id SELECT m.month,count( v.uuid ) AS total FROM (SELECT DATE_FORMAT(( CURDATE()), %Y-%m ) AS mon…...

14.Python 模块

目录 1. 使用模块2. 使用包3. 常用模块3.1 日期和时间3.2 伪随机数3.3 摘要算法3.4 JSON 处理3.5 图像处理 模块是Python用来组织代码的一种方法&#xff0c;包是Python用来组织模块的一种方法。 常用基本语法如下&#xff1a; Windows 按住winR 输入 cmd&#xff0c;Mac 打开…...

三十分钟学会Linux的基本操作

GNU/Linux GNU项目是由Richard Stallman发起的自由软件运动&#xff0c;旨在创建一个完全自由的操作系统。虽然GNU项目已经开发了大量的系统组件和工具&#xff0c;但它一直缺少一个完整的操作系统内核。在这时Linus Torvalds开发了Linux内核&#xff0c;并将其发布为自由软件…...

1688商品详情数据接口(1688.item_get)

1688商品详情数据接口是一种程序化的接口&#xff0c;通过这个接口&#xff0c;商家或开发者可以使用自己的编程技能&#xff0c;对1688平台上的商品信息进行查询、获取和更新。这个接口允许商家根据自身的需求&#xff0c;获取商品的详细信息&#xff0c;例如价格、库存、描述…...

SA实战 ·《SpringCloud Alibaba实战》第14章-服务网关加餐:SpringCloud Gateway核心技术

大家好,我是冰河~~ 一不小心《SpringCloud Alibaba实战》专栏都更新到第14章了,再不上车就跟不上了,小伙伴们快跟上啊! 在《SpringCloud Alibaba实战》专栏前面的文章中,我们实现了用户微服务、商品微服务和订单微服务之间的远程调用,并且实现了服务调用的负载均衡。也基…...

设计师不能忽视的几个宝藏图标设计工具

在这个快速变化的时代&#xff0c;设计师对创新和实用工具的需求越来越大。这就要求我们及时跟上潮流&#xff0c;不断探索和尝试最新、最有价值的图标设计工具。只有这样&#xff0c;我们才能在竞争激烈的设计市场中脱颖而出。以下是我们精心挑选的2024年值得一试的图标设计工…...

设计模式-行为型模式-模板方法模式

一、什么是模板模式 模板方法模式&#xff08;Template Method Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一个算法骨架&#xff0c;允许子类在不改变算法整体结构的情况下重新定义算法的某些步骤。 主要组成部分&#xff1a; 1、模板方法&#xff08;Templ…...

露营管理系统预约小程序效果如何

旅游经济已经复苏&#xff0c;并且市场规模增速加快&#xff0c;近一年来远途/周边游客户增多&#xff0c;不少旅游景区在节假日常常面对客流爆满现象。同时露营作为近几年突然火热的项目&#xff0c;其需求也是日渐上升。 然而在高需求的同时&#xff0c;我们也看到露营经营痛…...

【产品安全平台】上海道宁与Cybellum将整个产品安全工作流程整合到一个专用平台中,保持构建的互联产品的网络安全和网络合规性

Cybellum将 整个产品安全工作流程 整合到一个专用平台中 使设备制造商能够 保持他们构建的互联产品的 网络安全和网络合规性 产品安全性对 每个人来说都不一样 每个行业的系统、工作流程和 法规都存在根本差异 因此&#xff0c;Cybellum量身定制了 Cybellum的平台和技…...

css 实现鼠标上移添加下划线

效果图 实现代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wi…...

C语言--给定一个数组,把第一项的值减去第二项的值,第二项的值减去第三项的值,第三项的值减去第四项的值,依次类推。放到一个新的数组中,并打印新的数组

一.题目描述&#xff1a; 给定一个数组&#xff0c;把第一项的值减去第二项的值&#xff0c;第二项的值减去第三项的值&#xff0c;第三项的值减去第四项的值&#xff0c;依次类推。放到一个新的数组中&#xff0c;并打印新的数组。 比如&#xff1a;输入一个数组是5&#xff…...

Vue+Swiper实现轮播图效果

效果展示 实现了自带切换按钮在图片外部实现了自定义的切换按钮 背景 在项目中使用到了轮播图&#xff0c;实现点击上一张下一张时实现循环显示&#xff0c;同时预览两个图片&#xff0c;并加以文字对图片的说明。 设计 使用 Swiper 插件&#xff0c;可以实现当前这个需求。…...

竞赛选题 行人重识别(person reid) - 机器视觉 深度学习 opencv python

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习行人重识别(person reid)系统 该项目…...

解决vue中引入天地图显示不全问题,设置setTimeout即可解决!

index.html中引入天地图api <script type"text/javascript" src"https://api.tianditu.gov.cn/api?v4.0&tk你的key"></script>map.vue中初始化天地图 //初始化天地图 initTMap() {const T window.T;// 3.初始化地图对象this.tMap new…...

【OpenCV实现图像:使用OpenCV进行物体轮廓排序】

文章目录 概要读取图像获取轮廓轮廓排序小结 概要 在图像处理中&#xff0c;经常需要进行与物体轮廓相关的操作&#xff0c;比如计算目标轮廓的周长、面积等。为了获取目标轮廓的信息&#xff0c;通常使用OpenCV的findContours函数。然而&#xff0c;一旦获得轮廓信息后&#…...

【8】Spring Boot 3 集成组件:安全组件 spring security【官网概念篇】

目录 【8】Spring Boot 3 集成组件&#xff1a;安全组件 spring securitySpring Security 简介先决条件引入依赖身份验证密码存储密码存储历史DelegatingPasswordEncoder密码存储格式密码加解密类自定义密码存储 体系结构 ArchitectureServlet 过滤器DelegatingFilterProxyFilt…...

UDP中connect的作用

udpclientNoConnect.c里边的内容如下&#xff1a; #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<arpa/inet.h> #include<sys/socket.h> #include <errno.h> #include <syslog.h…...

Go使用开源库go-excelize操作Excel文件

以下是一个示例代码&#xff0c;读取一个 Excel 文件并打印其中的所有单元格值&#xff1a; package mainimport ("fmt""github.com/30x/go-excelize" )func main() {// 打开 Excel 文件f, err : excelize.OpenFile("yourfile.xlsx")if err ! n…...

软件测试个人求职简历该怎么写,模板在这里

1、个人资料 姓名&#xff1a;xxx性别&#xff1a;x 手机号码&#xff1a;138888888xx邮箱&#xff1a;xxx 学历&#xff1a;本科专业&#xff1a;电子商务 英语&#xff1a;四级当前工作&#xff1a;测试工程师 从业时间&#xff1a;4年期望薪资&#xff1a;面议 求职意向软件…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...