第 352 场LeetCode周赛

news2024/11/16 23:47:19

A 最长奇偶子数组

在这里插入图片描述在这里插入图片描述

枚举满足条件的左端点能延续的最长右端点

class Solution {
public:
    int longestAlternatingSubarray(vector<int> &nums, int threshold) {
        int res = 0;
        int n = nums.size();
        for (int i = 0; i < n;) {
            if (nums[i] % 2 == 0 && nums[i] <= threshold) {
                int j = i + 1;
                while (j < n && nums[j] <= threshold && nums[j] % 2 != nums[j - 1] % 2)
                    j++;
                res = max(res, j - i);
                i = j;
            } else
                i++;
        }
        return res;
    }
};

B 和等于目标值的质数对

在这里插入图片描述

线性筛: 预处理求出1~n中的各数是否是质数, 然后枚举x

class Solution {
public:
    vector<vector<int>> findPrimePairs(int n) {
        vector<int> pri;
        vector<int> vis(n + 1);
        for (int i = 2; i <= n; i++) {
            if (!vis[i])//vis[i]==0且i!=1 则i为质数
                pri.push_back(i);
            for (auto pi: pri) {
                if (pi * i > n)
                    break;
                vis[pi * i] = 1;
                if (i % pi == 0)
                    break;
            }
        }
        vector<vector<int>> res;
        for (int i = 2; i <= n - i; i++)
            if (!vis[i] && !vis[n - i])
                res.push_back({i, n - i});
        return res;
    }
};

C 不间断子数组

在这里插入图片描述在这里插入图片描述

滑动窗口: 若一个数组是不间断子数组则其任意子数组都是不间断子数组, 所以可以用滑动窗口来枚举窗口的右端点 r r r, 设此时窗口的左端点最小为 l l l, 则以 r r r为子数组右端点的不间断子数组的数目为 r − l + 1 r-l+1 rl+1. 中途用堆维护窗口内的最大值和最小值, 同时用哈希表记录一个数值在窗口内出现的次数.

class Solution {
public:
    long long continuousSubarrays(vector<int> &a) {
        int n = a.size();
        long long res = 0;
        unordered_map<int, int> cnt;//哈希表记录窗口内数出现次数
        priority_queue<int, vector<int>, greater<int>> minheap;//最小堆
        priority_queue<int> maxheap;//最大堆
        for (int l = 0, r = 0; r < n; r++) {//枚举窗口右端点为r的情况
            minheap.push(a[r]);
            maxheap.push(a[r]);
            cnt[a[r]]++;
            while (1) {// 可能需要更新窗口左端点
                while (!cnt[maxheap.top()])//删除不在窗口内的元素
                    maxheap.pop();
                while (!cnt[minheap.top()])//删除不在窗口内的元素
                    minheap.pop();
                if (!maxheap.empty() && !minheap.empty() && maxheap.top() - minheap.top() > 2)//更新窗口左端点
                    cnt[a[l++]]--;
                else
                    break;
            }
            res += r - l + 1;
        }
        return res;
    }
};

D 所有子数组中不平衡数字之和

在这里插入图片描述在这里插入图片描述
滑动窗口+多重集: 枚举子数组的长度 l e n len len, 对相同长度的子数组使用滑动窗口的方式从左往右遍历, 用多重集维护当前窗口内的元素, 在窗口移动过程(右端点右移和左端点右移)中维护当前的不平衡数字.

class Solution {
public:
    int sumImbalanceNumbers(vector<int> &a) {
        int n = a.size();
        int res = 0;
        multiset<int> s;//多重集中可以含相同元素
        for (int len = 2; len <= n; len++) {//枚举子数组的长度len
            s.clear();//清0
            int cur = 0;
            for (int i = 0; i < len - 1; i++)
                s.insert(a[i]);
            for (auto x = s.begin(); next(x) != s.end(); x++)//对应[0,len-1)区间
                if (*next(x) - *x > 1)
                    cur++;
            for (int l = 0, r = len - 1; r < n; l++, r++) {//枚举长为len的子数组的右端点r
                int d = 0;
                auto loc = s.upper_bound(a[r]);// a[r]需要插入至loc处
                if (loc != s.begin()) {
                    if (loc != s.end() && *loc - *prev(loc) > 1)// 多重集插入前 loc与其前驱不平衡, 所以变化量 -1
                        d--;
                    if (a[r] - *prev(loc) > 1)// 多重集插入后 a[r]与其前驱不平衡, 所以变化量 +1
                        d++;
                }
                if (loc != s.end() && *loc - a[r] > 1)// 多重集插入后 a[r]与其后驱不平衡, 所以变化量 +1
                    d++;
                s.insert(loc, a[r]);//添加a[r]
                cur += d;//更新当前的不平衡数
                res += cur;
                d = 0;
                loc = s.lower_bound(a[l]);//多重集中loc处的a[l]需要被删除
                if (loc != s.begin() && *loc - *prev(loc) > 1)// 删除前loc与其前驱不平衡, 所以变化量 -1
                    d--;
                if (next(loc) != s.end() && *next(loc) - *loc > 1)// 删除前loc与其后驱不平衡, 所以变化量 -1
                    d--;
                if (loc != s.begin() && next(loc) != s.end() && *next(loc) - *prev(loc) > 1)//loc前驱与其后驱在删除后不平衡, 所以变化量 +1
                    d++;
                cur += d;//更新当前的不平衡数
                s.erase(loc);//删除a[l]
            }
        }
        return res;
    }
};

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

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

相关文章

Spring Boot 中的 Spring Cloud Hystrix:原理和使用

Spring Boot 中的 Spring Cloud Hystrix&#xff1a;原理和使用 什么是 Spring Cloud Hystrix&#xff1f; Spring Cloud Hystrix 是一个用于处理分布式系统中故障的库。它实现了熔断器模式&#xff0c;可以防止由于故障服务的连锁反应而导致整个系统崩溃。Spring Cloud Hyst…

RabbitMq应用延时消息

一.建立绑定关系 package com.lx.mq.bind;import com.lx.constant.MonitorEventConst; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.*; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annota…

innovus: 如何让两个generate clock balance skew group?

如题&#xff0c;在sdc约束中两个generate clock被设置到同一个clock group中&#xff0c;工具虽然会生成对应的两个skew group&#xff0c;但是阅读ccoot_spec发现工具并没有让两个skew group进行balance&#xff0c;这时就需要手动设置balance skew group。 方法如下: 在读…

回归预测 | MATLAB实现WOA-DBN鲸鱼算法优化深度置信网络的多输入回归预测

回归预测 | MATLAB实现WOA-DBN鲸鱼算法优化深度置信网络的多输入回归预测 目录 回归预测 | MATLAB实现WOA-DBN鲸鱼算法优化深度置信网络的多输入回归预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 基于鲸鱼算法优化深度置信网络(WOA-DBN)的数据回归预测&…

微软AI太会了,示爱威胁PUA!

微软在以ChatGPT为基础的最新搜索引擎New Bing在公测仅一周后就引发了人们的担忧和恐惧。用户反馈&#xff0c;New Bing不仅会表现出类似示爱、PUA和威胁人类等人类特有的行为&#xff0c;还可能超越人类意志和价值观&#xff0c;并违反“阿西莫夫的机器人三定律”。这引起了人…

ODERBY的运行原理

定义表: CREATE TABLE t (id int(11) NOT NULL,city varchar(16) NOT NULL,name varchar(16) NOT NULL,age int(11) NOT NULL,addr varchar(128) DEFAULT NULL,PRIMARY KEY (id),KEY city (city) ) ENGINEInnoDB; SQL语句: select city,name,age from t where city杭州 orde…

【第二章 flutter学习之Dart介绍】

文章目录 前言一、Dart环境搭建安装 Dart Sdkvscode安装dart 前言 Dart是谷歌开发的计算机编程语言&#xff0c;诞生于2011&#xff0c;可以被用于web、服务器、移动应用、物联网应用的开发。要学习flutter必须会Dart 一、Dart环境搭建 安装 Dart Sdk 官网&#xff1a;https…

Kubernetes(k8s)容器编排Service

目录 1 Service概述1.1 为什么要有Service1.2 Service实现原理 2 Service 的类型3 Service示例3.1 准备工作3.1.1 创建deployment3.1.2 启动deployment3.1.3 访问测试 3.2 ClusterlP类型3.2.1 编辑资源清单3.2.2 应用Service3.2.3 访问测试3.2.4 删除Pod3.2.5 访问测试 3.3 Nod…

Python学习——类与对象

一、编程的两大思想 &#xff08;1&#xff09;面向过程 事物比较简单&#xff0c;用简单的线性思维即可解决 &#xff08;2&#xff09;面向对象 事物比较复杂&#xff0c;用简单的线性思维无法解决 &#xff08;3&#xff09;两者之间的关系 在面对复杂的问题时&#xff0c;宏…

gcc编译过程详解

以一个简单的C代码为例&#xff0c;详细讲解gcc整个编译过程。 1、预处理 主要处理#开头的东西&#xff0c;例如头文件处理、条件编译处理、将宏定义进行替换&#xff0c;还可以去掉注释、添加行号等。预处理的命令如下&#xff1a; gcc -E hello.c -o hello.i #-E表示预处理…

全志V3S嵌入式驱动开发(解决kernel 5.2.y wifi驱动问题)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 wifi模块&#xff0c;之前测试的时候&#xff0c;开发板上用的是esp 8089&#xff0c;当时内核时4.14.y&#xff0c;测试结果也是通过的。印象不是…

《C++ Primer》--学习10

反向迭代器 反向迭代器就是在容器中从尾元素向首元素反向移动的迭代器&#xff0c;递增一个反向迭代器会移动到前一个元素 反向迭代器需要递减运算符 我们只能从既支持也支持--的迭代器来定义反向迭代器&#xff0c;除了 forward_list 外的标准容器都支持 流迭代器不支持递减…

【分布式存储】聊聊共识和一致性

在分布式存储系统中&#xff0c;对于提高性能、可用性、可拓展性来说都有相关机制可以保证&#xff0c;比如复制、切片等&#xff0c;但是一旦涉及到分布式系统中选主的问题&#xff0c;就比较难&#xff0c;因为网络是不可靠的&#xff0c;并且可能还有拜占庭将军问题。所以如…

JAVA8-lambda表达式7:重要的函数接口

从什么是好代码讲起 最近又在看《clean code》&#xff0c;回顾了一下里面提到的整洁代码的标准。 然后审视了一下现在的项目代码&#xff0c;里面还有很多if&#xff0c;for循环。比如&#xff1a; // 查询用户列表 List<User> userList userService.list(); // 打印…

VSC++: 验证身份证

缘由https://ask.csdn.net/questions/1082358 void 验证身份证() {//缘由https://ask.csdn.net/questions/1082358int 权重[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 }, 个 0, j 0, a 0, he 0;char M[] "10X98765432", 身份号[100][20]{};//…

如何备份 Kubernetes MySQL Operator 集群

Oracle 的MySQL Operator for Kubernetes 是在集群内自动化 MySQL 数据库配置的便捷方法。该运营商的主要功能之一是集成的自动备份支持,可提高您的弹性。备份会定期将数据库复制到外部存储。 本文将引导您完成设置到与 Amazon S3 兼容的对象存储服务的备份。您还将了解如何将…

C/C++结构体内存对齐的一些思考

在C中&#xff0c;结构体的内存对齐是为了提高访问结构体成员变量的效率和保证硬件的要求。 结构体对齐 C/C C 结构体内存对齐的示例代码C/C结构体内存对齐的原则结合汇编代码分析结构体的内存对齐问题 C 结构体内存对齐的示例代码 #include <iostream>struct Test_Stru…

运维必学 | 初识介绍-从零开始学Windows批处理(Batch)编程系列教程

欢迎关注「全栈工程师修炼指南」公众号 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01; 专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享 “ 花开堪折直须折&#xff0c;莫待无花空折枝。 ” 作者主页&#xff1…

ACL 2023长文 | 基于能量超球体模型提升以事件为中心的结构化预测

论文标题&#xff1a; SPEECH: Structured Prediction with Energy-Based Event-Centric Hyperspheres 收录会议&#xff1a; ACL 2023 Main Conference 论文链接&#xff1a; https://arxiv.org/abs/2305.13617 开源链接&#xff1a; https://github.com/zjunlp/SPEECH 总述 以…

硬件知识:条码打印机5大接口类型介绍

目录 1、串口 2、并行接口 &#xff08;并口&#xff09; 3、USB接口 4、网口 5、PS/2接口 接口选择的不同&#xff0c;其打印输出的速度也不同。 条码打印机与计算机之间都是通过接口连接的&#xff0c;条码打印机常见的分为5种接口&#xff1a;串口&#xff08;也有称之…