第 352 场LeetCode周赛

A leetcode.cn/problems/longest-even-odd-subarray-with-threshold/">最长奇偶子数组

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

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

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 leetcode.cn/problems/prime-pairs-with-target-sum/">和等于目标值的质数对

在这里插入图片描述

线性筛: 预处理求出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 leetcode.cn/problems/continuous-subarrays/">不间断子数组

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

滑动窗口: 若一个数组是不间断子数组则其任意子数组都是不间断子数组, 所以可以用滑动窗口来枚举窗口的右端点 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 leetcode.cn/problems/sum-of-imbalance-numbers-of-all-subarrays/">所有子数组中不平衡数字之和

在这里插入图片描述在这里插入图片描述
滑动窗口+多重集: 枚举子数组的长度 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.niftyadmin.cn/n/1010234.html

相关文章

vue路由配置公共布局layout

本篇实现三段式界面 公共布局文件 首先在src下新建layoutPc文件夹&#xff0c;再给layoutPc新建组件 header 、bottm、main三个文件基本确定了一个页面的基本架子&#xff0c;然后再新建一个index.vue文件 comment/AppMain.vue <template><section class"ap…

redis-主从安装

解决问题 1.数据安全问题 2.高并发读问题 1.主节点和 redis-单节点安装一致 2.从节点 daemonize yes port 6379 bind 0.0.0.0 requirepass 123456 save 3600 1 300 100 60 10000dir /usr/local/redis dbfilename dump.rdb logfile redis.log pidfile redis.pidreplicaof 172.2…

如何看懂时序图(1):时序图基础知识

对于参考手册中经常出现的一些时序图&#xff0c;经常会让我摸不着头脑。比如对于Flash的时序图来说&#xff0c;要看懂的话&#xff0c;里面的每一个参数都得系统地学一遍&#xff0c;而且时序图中的一些符号也不太懂是什么意思。前一段时间调HyperRAM的时候&#xff0c;因为那…

AtCoder Regular Contest 163 C. Harmonic Mean(构造 补写法)

题目 t(t<500)组case&#xff0c; 给定一个数n(n<500)&#xff0c;构造一个长为n的数组 思路来源 官方题解 题解 注意到 ... 所以&#xff0c; 1. 当n没有在前面的序列里出现过时&#xff0c;可以用(2,6,12,...,n)来构造一组解 2. 当出现过时&#xff0c;例如当n…

机器学习——掌握决策树ID3算法的原理,通过增益熵实现手工推导的过程。

文章目录 决策树介绍优缺点ID3算法原理举例 决策树的构建1、特征选择&#xff08;1&#xff09;香农熵&#xff08;2&#xff09;信息增益 2、决策树的生成3、决策树的修剪 总结&#xff1a;参考文献 决策树 介绍 决策树(decision tree)是一种基本的分类与回归方法。ID3是其中…

原子核物理概述

原子核物理基础 原子核物理研究史 1896&#xff1a;H.Becquerel发现了 U 放射现象1897&#xff1a;P.&M.Curie发现 Po和镭 Ra1899&#xff1a;卢瑟福发现\alpha \beta 射线 1900&#xff1a;维拉德发现 \gamma 射线1903&#xff1a;卢瑟福证实\alpha 射线为He_2^,\beta 射…

Redis 实现限流的三种方式

面对越来越多的高并发场景&#xff0c;限流显示的尤为重要。 当然&#xff0c;限流有许多种实现的方式&#xff0c;Redis具有很强大的功能&#xff0c;我用Redis实践了三种的实现方式&#xff0c;可以较为简单的实现其方式。Redis不仅仅是可以做限流&#xff0c;还可以做数据统…

线性DP—入门篇

线性动态规划的主要特点是状态转移的推导是按照问题规模 从小到大依次推导&#xff0c;较大规模的问题的解依赖较小规模的问题的解。 数字三角形&#xff1a; [USACO1.5][IOI1994]数字三角形 Number Triangles - 洛谷https://www.luogu.com.cn/problem/P1216我们来看一道经典…