LeetCode 第131场双周赛个人题解

news2024/10/6 20:33:39

100309. 求出出现两次数字的 XOR 值

原题链接

求出出现两次数字的 XOR 值 - 力扣 (LeetCode) 竞赛

思路分析

签到题,一次遍历

AC代码

class Solution:
    def duplicateNumbersXOR(self, nums: List[int]) -> int:
        cnt = Counter(nums)
        res = 0
        st = set(nums)
        for x in st:
            if cnt[x] == 2:
                res ^= x
        return res

100303. 查询数组中元素的出现位置

原题链接

  查询数组中元素的出现位置 - 力扣 (LeetCode) 竞赛

思路分析

  记录下每个次数的位置,然后遍历一下查询就行

时间复杂度O(n)

AC代码

class Solution:
    def occurrencesOfElement(self, nums: List[int], queries: List[int], x: int) -> List[int]:
        mp = defaultdict()
        s = 0
        for i, v in enumerate(nums):
            if v == x:
                s += 1
                mp[s] = i
        return [mp[v] if v in mp else -1 for v in queries]
            
            

100313. 所有球里面不同颜色的数目

原题链接

  所有球里面不同颜色的数目 - 力扣 (LeetCode) 竞赛

思路分析

  一开始敲了个莫队的板子,又看了下题看错题了。。。没那么复杂

边遍历边执行操作,边维护每个元素出现次数,然后记录下集合中的元素就行

时间复杂度O(n)

AC代码

class Solution:
    def queryResults(self, limit: int, queries: List[List[int]]) -> List[int]:
        cnt = Counter()
        mp = defaultdict(int)
        ret = []
        st = set()
        for x, y in queries:
            cnt[mp[x]] -= 1
            if cnt[mp[x]] == 0:
                st.remove(mp[x])
            mp[x] = y
            cnt[y] += 1
            st.add(y)
            ret.append(len(st))
        return ret

100314. 物块放置查询

原题链接

  物块放置查询 - 力扣 (LeetCode) 竞赛

思路分析

  思路就是线段树维护区间和,但是会卡常。

对原数轴重新编号

原数轴上的点i变为2 * i + 1,点与点之间的空隙也依次编号

然后空隙的权值为1,原数轴点的权值为0

在原数轴放障碍相当于将其赋值为负无穷

对于每个查询[0, x]等价于查询[1, 2 * x + 1]的最大连续子段和是否大于等于sz

我们只需要用线段树维护最大连续子段和即可

只涉及单点修改和区间查询,时间复杂度为O(nlogn)


由于拆点,区间长度为1e5量级,但是竟然被卡常了?

加个快读和吸氧才过

掉大分!!!

AC代码

#pragma GCC optimize(2)
const int N = 1e5 + 10;
#define lc p << 1
#define rc p << 1 | 1
struct node{
    int l, r;
    long long sum, lma, rma, ma;
}tr[N << 2];

int n, m, a[N];

void pushup(node& p, node& l, node& r){
    p.sum = l.sum + r.sum;
    p.lma = max(l.lma, l.sum + r.lma);
    p.rma = max(r.rma, r.sum + l.rma);
    p.ma = max(l.rma + r.lma, max(l.ma, r.ma));
}

void build(int p, int l, int r){
    tr[p] = { l, r, 0, 0, 0, 0 };
    if(l == r){
        if (l % 2 == 0) tr[p] = { l, l, 1, 1, 1, 1 };
        return;
    }
    int mid = l + r >> 1;
    build(lc, l, mid), build(rc, mid + 1, r);
    pushup(tr[p], tr[lc], tr[rc]);
}

node query(int p, int l, int r){
    if(l <= tr[p].l && tr[p].r <= r)
        return tr[p];
    int mid = tr[p].l + tr[p].r >> 1;
    if(r <= mid) return query(lc, l, r);
    else if(l > mid) return query(rc, l, r);
    node left = query(lc, l, r);
    node right = query(rc, l, r);
    node ret = { 0 };
    pushup(ret, left, right);
    return ret;
}

void update(int p, int x, int k){ //点修
    if(tr[p].l == x && tr[p].r == x){
        tr[p] = { x, x, k, k, k, k };
        return;
    }
    int mid = tr[p].l + tr[p].r >> 1;
    if(x <= mid) update(lc, x, k);
    else update(rc, x, k);
    pushup(tr[p], tr[lc], tr[rc]);
}


class Solution {
public:
    Solution() {
        ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    }
    vector<bool> getResults(vector<vector<int>>& queries) {
        memset(tr, 0, sizeof tr);
        build(1, 1, N);
        vector<bool> ret;
        for (auto& v : queries) {
            int op = v[0];
            if (op == 1) {
                update(1, v[1] * 2 + 1, -1e8);
            }
            else {
                auto t = query(1, 1, v[1] * 2 + 1);
                ret.push_back(t.ma >= v[2]);
            }
        }
        return ret;
    }
};

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

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

相关文章

linux系统环境—基础开发工具

目录 1. yum工具&#xff0c;进行软件安装 示例&#xff1a;下载第一个软件 2. vim编辑器&#xff0c;学会vim的简单配置 vim的基本操作 vim末行模式命令集 插入模式与普通编辑器差不多。无命令集合 3. gcc/g编译器的使用&#xff0c;并了解其过程&#xff0c;原理 1预…

脚注:书籍的小秘密,躲藏在脚注间

脚注&#xff1a;书籍的小秘密&#xff0c;躲藏在脚注间 脚注是一种在文本中提供补充信息、引用出处或注解的方式&#xff0c;有助于读者更全面地理解文中内容&#xff0c;并为进一步研究提供参考和跳转点。 在一书本中&#xff0c;脚注是额外提供给读者的文字信息&#xff0…

java:static关键字用法

在静态方法中不能访问类的非静态成员变量和非静态方法&#xff0c; 因为非静态成员变量和非静态方法都必须依赖于具体的对象才能被调用。 从上面代码里看出&#xff1a; 1.静态方法不能调用非静态成员变量。静态方法test2()中调用非静态成员变量address&#xff0c;编译失败…

Java进阶学习笔记19——内部类

1、 内部类&#xff1a; 是类中五大成分之一&#xff08;成员变量、方法、构造函数、内部类、代码块&#xff09;&#xff0c;如果一个类定义在另一个 类的内部&#xff0c;这个类就是内部类。 场景&#xff1a;当一个类的内部&#xff0c;包含了一个完整的事物&#xff0c;且…

[笔试训练](三十三)097:跳台台阶扩展问题098:包含不超过两种字符的最长子串099:字符串的排列

目录 097:跳台台阶扩展问题 098:包含不超过两种字符的最长子串 099:字符串的排列 097:跳台台阶扩展问题 题目链接:跳台阶扩展问题_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 规律题: 1.跳上n级台阶的跳法等于前面1~(n-1)级台阶跳法的总和1。 2.跳…

[5] CUDA线程调用与存储器架构

CUDA线程调用与存储器架构 前几节简单讲了如何编写CUDA程序&#xff0c;利用GPU的处理能力并行执行多个线程和块。之前所有程序里的线程是相互独立的&#xff0c;没有多个线程之间的通信多是实际应用程序需要中间线程之间的通信&#xff0c;本文将仔细讲解线程调用以及CUDA的分…

Gradle的settings.gradle.kts你真的理解吗?

你还在用.gradle文件吗&#xff1f;例如build.gradle、settings.gradle&#xff0c;那么你就out了。现在我们有必要了解一下kts脚本了。在Android项目中&#xff0c;默认有3个文件可以替换成kts脚本&#xff0c;即project的build.gradle、app模块的build.gradle和project的sett…

关于在子线程中获取不到HttpServletRequest对象的问题

这篇文章主要分享一下项目里遇到的获取request对象为null的问题&#xff0c;具体是在登录的时候触发的邮箱提醒&#xff0c;获取客户端ip地址&#xff0c;然后通过ip地址定位获取定位信息&#xff0c;从而提示账号在哪里登录。 但是登录却发现获取request对象的时候报错了。 具…

数据插值之朗格朗日插值(一)

目录 一、引言 二、代码实现 2.1 Lagrange插值求插值多项式&#xff1a; 代码解析&#xff1a; 1.vpa解释 2.ploy&#xff08;x&#xff09;解释: 3.conv&#xff08;&#xff09;解释 4.poly2sym()解释 2.2 Lagrange插值求新样本值和误差估计&#xff1a; 代码解析&…

鲁教版七年级数学上册-笔记

文章目录 第一章 三角形1 认识三角形2 图形的全等3 探索三角形全等的条件4 三角形的尺规作图5 利用三角形全等测距离 第二章 轴对称1 轴对称现象2 探索轴对称的性质4 利用轴对称进行设计 第三章 勾股定理1 探索勾股定理2 一定是直角三角形吗3 勾股定理的应用举例 第四章 实数1 …

C++技能进阶指南——多态语法剖析

前言&#xff1a;多态是面向对象的三大特性之一。顾名思义&#xff0c; 多态就是多种状态。 那么是什么的多种状态呢&#xff1f; 这里的可能有很多。比如我们去买火车票&#xff0c; 有普通票&#xff0c; 学生票&#xff1b; 又比如我们去旅游&#xff0c; 有儿童票&#xff…

心链2---前端开发(整合路由,搜索页面,用户信息页开发)

心链——伙伴匹配系统 接口调试 说书人&#x1f4d6;&#xff1a;上回书说到用了两种方法查询标签1.SQL查询&#xff0c;2.内存查询&#xff1b;两种查询效率是部分上下&#xff0c;打的是难解难分&#xff0c;是时大地皴裂&#xff0c;天色聚变&#xff0c;老祖斟酌再三最后决…

数据库-SQL性能分析

SQL执行频率 慢查询日志 慢查询日志记录了所有执行时间超过指定参数&#xff08;long_query_time&#xff0c;单位&#xff1a;秒&#xff0c;默认10秒&#xff09;的所有 SQL语句的日志。 MySQL的慢查询日志默认没有开启&#xff0c;我们可以查看一下系统变量 slow_query_l…

leetcode328. 奇偶链表,附详细解析和代码注释

leetcode328. 奇偶链表 给定单链表的头节点 head &#xff0c;将所有索引为奇数的节点和索引为偶数的节点分别组合在一起&#xff0c;然后返回重新排序的列表。 第一个节点的索引被认为是 奇数 &#xff0c; 第二个节点的索引为 偶数 &#xff0c;以此类推。 请注意&#xff0…

初出茅庐的小李博客之用MQTT.fx软件进行消息发布与订阅【 基于EMQX Cloud】

MQTT.fx软件使用简单介绍 MQTT.fx 的软件界面如下图所示&#xff0c;最上方为 MQTT Broker 连接地址栏&#xff0c;及其连接配置。其下方功能 Tabs 含有 Publish 发布栏、Subscribe 订阅栏、Scripts 脚本栏、Broker Status 状态消息栏、Log 日志信息控制栏。 连接之前要明确几…

Distributed Transactions Mit 6.824

Topic1&#xff1a;distributed transactions concurrency control atomic commit 传统计划&#xff1a;事务 程序员标记代码序列的开始/结束作为事务。 事务示例 x 和 y 是银行余额——数据库表中的记录。x 和 y 位于不同的服务器上&#xff08;可能在不同的银行&#x…

NDIS小端口驱动(九)

PCIe设备难免会遇到一些重置设备的请求&#xff0c;例如重置总线的时候&#xff0c;但是由于NIC网卡的多样性&#xff0c;重置设备确实也有许多要注意的地方&#xff0c;另外还有一些包含WDM的NDIS驱动 微型端口驱动程序硬件重置 微型端口驱动程序必须向 NdisMRegisterMinipo…

10款免费黑科技软件,强烈推荐!

1.AI视频生成——巨日禄 网页版https://aitools.jurilu.com/ "巨日禄 "是一款功能强大的文本视频生成器&#xff0c;可以快速将文本内容转换成极具吸引力的视频。操作简单&#xff0c;用户只需输入文字&#xff0c;选择喜欢的样式和模板&#xff0c; “巨日禄”就会…

qemu+gdb调试linux内核

打开CONFIG_DEBUG_INFO,编译内核 通过图形菜单配置该宏,执行make menuconfig。 kernel hacking —> compile-time checks and compiler options —> compile the kernel with debug info 验证是否打开成功,grep -nr “CONFIG_DEBUG_INFO” .config。 打开成功,然后…