第 373 场 LeetCode 周赛题解

news2024/11/26 0:46:47

A 循环移位后的矩阵相似检查

模拟

class Solution {
public:
    bool areSimilar(vector<vector<int>> &mat, int k) {
        int m = mat.size(), n = mat[0].size();
        k %= n;
        auto g = mat;
        for (int i = 0; i < m; i++)
            if (i & 1)
                rotate(mat[i].begin(), mat[i].begin() + n - k, mat[i].end());
            else
                rotate(mat[i].begin(), mat[i].begin() + k, mat[i].end());
        return g == mat;
    }
};

B 统计美丽子字符串 I

在这里插入图片描述

前缀和:枚举子数组,用前缀和记录当前子数组的元音字符数

class Solution {
public:
    int beautifulSubstrings(string s, int k) {
        int n = s.size();
        unordered_set<char> vo{'a', 'e', 'i', 'o', 'u'};
        vector<int> sv(n + 1);
        for (int i = 0; i < n; i++)
            sv[i + 1] = vo.count(s[i]) ? sv[i] + 1 : sv[i];
        int res = 0;
        for (int l = 0; l < n; l++)
            for (int r = l; r < n; r++)
                if (auto v = sv[r + 1] - sv[l];v * 2 == r - l + 1 && v * v % k == 0)
                    res++;
        return res;
    }
};

C 交换得到字典序最小的数组

在这里插入图片描述

排序: 排序后的 n u m s nums nums 可以划分成若干子数组,其中每个子数组中相邻元素之差不超过 l i m i t limit limit ,可以通过交换得到的字典序最小的数组即为:每个子数组在原数组所在位置上按非降序排序 得到的数组

class Solution {
public:
    vector<int> lexicographicallySmallestArray(vector<int> &nums, int limit) {
        int n = nums.size();
        vector<pair<int, int>> li(n);
        for (int i = 0; i < n; i++)
            li[i] = {i, nums[i]};
        sort(li.begin(), li.end(), [](pair<int, int> &x, pair<int, int> &y) { return x.second < y.second; });//按值排序
        for (int i = 0, j = 0; i < n; i = ++j) {
            while (j + 1 < n && li[j + 1].second - li[j].second <= limit)//找到当前分组的右边界
                j++;
            vector<pair<int, int>> t{li.begin() + i, li.begin() + j + 1};
            sort(li.begin() + i, li.begin() + j + 1);//按原数组中下标排序
            for (int k = i; k <= j; k++)
                nums[li[k].first] = t[k - i].second;
        }
        return nums;
    }
};

D 统计美丽子字符串 II

在这里插入图片描述

前缀和 + 哈希:设 v k v_{k} vk 表示 s s s 长为 k k k 的前缀中的元音字符数,设 c k c_{k} ck 表示 s s s 长为 k k k 的前缀中的非元音字符数,若 s [ l , r ] s[l,r] s[l,r] 为美丽子字符串,则有 v r + 1 − v l = c r + 1 − c l v_{r+1}-v_{l}=c_{r+1}-c_{l} vr+1vl=cr+1cl , 即 v r + 1 − c r + 1 = v l − c l v_{r+1}-c_{r+1}=v_{l}-c_{l} vr+1cr+1=vlcl ,且 ( v r + 1 − v l ) 2 % k = 0 (v_{r+1}-v_{l})^2\%k=0 (vr+1vl)2%k=0 ,不妨设 w = v r + 1 − v l w=v_{r+1}-v_{l} w=vr+1vl,则 v l ≡ v r + 1 − w ( m o d    k ) v_l \equiv v_{r+1}-w (mod\;k) vlvr+1w(modk),所以前面出现过的满足 v l − c l v_{l}-c_{l} vlcl v l ≡ v r + 1 − w ( m o d    k ) v_l \equiv v_{r+1}-w (mod\;k) vlvr+1w(modk) l l l 可以使 s [ l , r ] s[l,r] s[l,r] 为美丽子字符串

class Solution {
public:
    using ll = long long;

    long long beautifulSubstrings(string s, int k) {
        vector<int> li;
        for (int i = 0; i < k; i++)
            if (i * i % k == 0)
                li.push_back(i);
        map<pair<int, int>, int> cnt;
        unordered_set set_vo{'a', 'e', 'i', 'o', 'u'};
        cnt[{0, 0}] = 1;
        ll res = 0;
        for (int i = 0, v = 0, c = 0; i < s.size(); i++) {
            if (set_vo.count(s[i]))
                v++;
            else
                c++;
            for (auto w: li) {
                auto vl = ((v - w) % k + k) % k;
                if (auto it = cnt.find({v - c, vl});it != cnt.end())
                    res += it->second;
            }
            cnt[{v - c, v % k}]++;
        }
        return res;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

林曦的小世界:不在担心与顾虑中蹉跎时间,Just Do It

内容来自林曦的小世界      先提问&#xff1a;你有没有过这样的经历&#xff0c;一项很想学的技艺&#xff0c;一件想做许久的事情&#xff0c;却始终下不了决心&#xff0c;担心左&#xff0c;担心右&#xff0c;彷徨犹豫间&#xff0c;时间过去了&#xff0c;这件事仍未…

苹果的未来:分析其成长策略和 2 兆美元以上的野心

Apple正在蕴育新的创新增长。作为世界上最有价值的公司&#xff0c;苹果公司拥有超过2万亿美元的市值和超过1000亿美元的年利润&#xff0c;并成功用十几年实践去打造和培育了一个硬件、软件和服务“三位一体”的商业生态&#xff0c;始终坚持以用户体验为先&#xff0c;创新极…

有关HarmonyOS-ArkTS的Http通信请求

一、Http简介 HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于在Web应用程序之间进行通信的协议&#xff0c;通过运输层的TCP协议建立连接、传输数据。Http通信数据以报文的形式进行传输。Http的一次事务包括一个请求和一个响应。 Http通信是基于客户端-服…

【送书活动】这本30w人都在看的Python数据分析畅销书:更新了!

文章目录 &#x1f354;简介&#x1f339;作译者简介&#x1f38d;购书链接&#xff1a;&#x1f970;彩蛋 想学习python进行数据分析&#xff0c;这本《利用python进行数据分析》是绕不开的一本书。目前该书根据Python3.10已经更新到第三版。 &#x1f354;简介 Python 语言极…

软件学院PTA天梯赛初赛选拔赛题解

目录 7-2 生肖确定&#xff08;模拟&#xff09; AC代码&#xff1a; 7-3 韩信点兵&#xff08;模拟&#xff09; AC代码&#xff1a; 7-4 程序员买包子&#xff08;模拟&#xff09; AC代码&#xff1a; 7-5 h0078. 蛇形矩阵变形 AC代码&#xff1a; 7-6 军事体能成绩…

spring-webmvc练习-日程管理-访问后端展示列表数据

1、util/request.js import axios from "axios";let request axios.create({baseURL: "http://localhost:8080",timeout: 50000 });export default request 2、api/schedule.js import request from "../util/request.js";export let getSchedu…

机器学习笔记 - 3D对象检测技术路线调研(未完)

一、3D对象检测简述 3D对象检测是计算机视觉中的一项任务&#xff0c;其目标是根据对象的形状、位置和方向在 3D 环境中识别和定位对象。它涉及检测物体的存在并实时确定它们在 3D 空间中的位置。这项任务对于自动驾驶汽车、机器人和增强现实等应用至关重要。 1、基本流程 给定…

js原理网页内容防复制-原理、实现及破解

大家好&#xff0c;这一集我们来看一下如何通过js代码实现网页内容防复制&#xff0c;并且使用代码复现效果&#xff0c;同时如何破解这种防复制。 视频教程链接&#xff1a;https://www.bilibili.com/video/BV1zM41197y7/ 代码删掉即可&#xff0c;删不掉关闭设置 您可以使用…

网络爬虫(Python:Requests、Beautiful Soup笔记)

网络爬虫&#xff08;Python&#xff1a;Requests、Beautiful Soup笔记&#xff09; 网络协议简要介绍一。OSI参考模型二、TCP/IP参考模型对应关系TCP/IP各层实现的协议应用层传输层网络层 HTTP协议HTTP请求HTTP响应HTTP状态码 Requests&#xff08;Python&#xff09;Requests…

网络爬虫(Python:Selenium、Scrapy框架;爬虫与反爬虫笔记)

网络爬虫&#xff08;Python&#xff1a;Selenium、Scrapy框架&#xff1b;爬虫与反爬虫笔记&#xff09; SeleniumWebDriver 对象提供的相关方法定位元素ActionChains的基本使用selenium显示等待和隐式等待显示等待隐式等待 Scrapy&#xff08;异步网络爬虫框架&#xff09;Sc…

SpringCloud微服务网关Gateway:gateway基本实现、断言工厂、过滤器工厂、浏览器同源策略、跨域问题解决方案

Gateway网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目&#xff0c;该项目是基于 Spring 5.0&#xff0c;Spring Boot 2.0和Project Reactor 等响应式编程和事件流技术开发的网关&#xff0c;它旨在为微服务架构提供一种简单有效的统一的 API路由管理方式 为什么…

HTML+CSS+JS网页设计与制作摄影类个人网页

可以使用网页三剑客htmlcssjs实现网页设计与制作&#xff0c;页面排版布局高端大气。 使用HTMLCSS页面布局设计&#xff0c;HTMLCSSJS网页设计与制作摄影类个人网页&#xff0c;这是一个优质的个人网页制作。 凭借简约的设计风格、精湛的制作工艺&#xff0c;突破与创新的理念…

2019年12月 Scratch(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试&#xff08;1~4级&#xff09;全部真题・点这里 一、单选题&#xff08;共15题&#xff0c;每题2分&#xff0c;共30分&#xff09; 第1题 以下模块&#xff0c;可以“说”出“我喜欢Apple”的是&#xff1f; A&#xff1a; B&#xff1a; C&#xff1a; …

测试工程师必看系列Jmeter_性能测试:负载测试和压力测试

负载测试 负载测试/容量测试&#xff1a;通过在测试过程中不断的调整负载&#xff0c;找到在多少用户量情况下&#xff0c;系统出现性能下降拐点&#xff1b;也被称为容量测试&#xff1b; 举例&#xff1a; 微信发送红包的负载测试&#xff1a; 1、找运维人员了解目前系统…

【数据库】表的连接在执行时的算法解析,嵌套循环连接算法的几种实现,多表连接中表的数量会影响什么

嵌套循环连接 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会定期更新…

CountDownLatch实战应用——批量数据多线程协调异步处理(子线程执行事务回滚)

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; CountDownLatch实战应用——批量数据多线程协调异步处理(子线程执行事务…

数据库基础教程之数据库的创建(二)

双击打开Navicat,点击:文件-》新建连接-》PostgreSQL 在下图新建连接中输入各参数,然后点击:连接测试,连接成功后再点击确定。 创建数据表   3.1 方法1   3.1.1.双击你的数据库-》双击public-》双击选中表-》右键-》新建表-》常规 3.1.2.设置字段信息   双击选中创建…

【李宏毅-元学习】

一、基本概念 1、元学习&#xff1a;学习如何学习&#xff0c;超参数调整 2、机器学习和元学习 机器学习&#xff1a;定义函数&#xff08;未知参数&#xff09;-定义损失函数-优化&#xff08;最小化损失函数&#xff09; 3、什么是元学习 机器学习通过三个步骤找到了学习算…

建造者模式-C语言实现

UML类图&#xff1a; 代码实现&#xff1a; #include <stdio.h> #include <stdlib.h>// 产品类 typedef struct {char* part1;char* part2;char* part3; } Product;// 抽象建造者类 typedef struct {void (*buildPart1)(void*, const char*);void (*buildPart2)(v…

Linux进程通信——信号(二)

信号处理函数的注册 信号处理函数的注册不只一种方法&#xff0c;分为入门版和高级版 1.入门版: 函数 signal 2.高级版:函数 sigection 信号处理发送函数 信号发送函数也不止一个&#xff0c;同样分为入门版和高级版 1.入门版: 函数 kill 2.高级版: 函数 sigqueue sigactio…