2024.05.25 第 131 场双周赛

news2024/11/17 11:46:48

Leetcode 第 131 场双周赛

求出出现两次数字的 XOR 值

[Leetcode 求出出现两次数字的 XOR 值](https://leetcode.cn/problems/find-the-xor-of-numbers-which-appear-twice/description/]

给你一个数组 nums ,数组中的数字 要么 出现一次,要么 出现两次。
请你返回数组中所有出现两次数字的按位_ _XOR 值,如果没有数字出现过两次,返回 0 。

第 131 场双周赛_1.png

用 HashMap 存储出现两次的数字,然后对数字进行 XOR 计算,即 ‘^’。

完整代码

class Solution {
    public int duplicateNumbersXOR(int[] nums) {
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        
        for (int num : nums) {
            map.put(num, map.getOrDefault(num, 0) + 1);
        }
        
        int res = 0;
        Iterator<Map.Entry<Integer, Integer>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<Integer, Integer> entry = iterator.next();
            if (entry.getValue() > 1) {
                res ^= entry.getKey();
            }
        }
        return res;
    }
}

查询数据中元素的出现位置

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

给你一个整数数组 nums ,一个整数数组 queries 和一个整数 x 。
对于每个查询 queries[i] ,你需要找到 nums 中第 queries[i] 个 x 的位置,并返回它的下标。如果数组中 x 的出现次数少于 queries[i] ,该查询的答案为 -1 。
请你返回一个整数数组 answer ,包含所有查询的答案。

第 131 场双周赛_2.png

先找出数组中值为 x 的位置数组,再从数组中获得结果。

完整代码

class Solution {
    public int[] occurrencesOfElement(int[] nums, int[] queries, int x) {
        List<Integer> list = new ArrayList<Integer>();
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == x) {
                list.add(i);
            }
        }
        
        for (int i = 0; i < queries.length; i++) {
            if (queries[i] > list.size()) {
                queries[i] = -1;
            } else {
                queries[i] = list.get(queries[i] - 1);
            }
        }
        return queries;
    }
}

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

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

给你一个整数 limit 和一个大小为 n x 2 的二维数组 queries 。
总共有 limit + 1 个球,每个球的编号为 [0, limit] 中一个 互不相同 的数字。一开始,所有球都没有颜色。queries 中每次操作的格式为 [x, y] ,你需要将球 x 染上颜色 y 。每次操作之后,你需要求出所有球中 不同 颜色的数目。
请你返回一个长度为 n 的数组 result ,其中 result[i] 是第 i 次操作以后不同颜色的数目。
注意 ,没有染色的球不算作一种颜色。

第 131 场双周赛_3.png

需要求出每次操作之后颜色的种类数。
需要用到两个 Map,一个 Map 记录每个球的颜色编号;一个 Map 记录每个颜色的数目,每次操作后获取颜色 Map 的大小既是所求结果。

  1. 更新 Map 球的颜色,直接使用 map.put()进行更新
  2. 更新球颜色数目的 Map,
    如果在记录球颜色的 Map 中有这个球的记录,则需要将此 Map 中颜色的数量减一;并如果其减为零,需要从 Map 中移除。
    更新颜色的数目加一。

这里可以使用数组来记录球的颜色,这样可能有些球的颜色一直没有更新,就会出现浪费内存的情况,因此使用 Map 来存储球的颜色,使用的内存更小一点。

完整代码

class Solution {
    public int[] queryResults(int limit, int[][] queries) {
        Map<Integer, Integer> balls = new HashMap<Integer, Integer>();
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        int[] res = new int[queries.length];
        
        for (int i = 0; i < queries.length; i++) {
            int ball = queries[i][0];
            int color = queries[i][1];
            if (balls.containsKey(ball)) {
                int val = balls.get(ball);
                if (map.get(val) == 1) {
                    map.remove(val);
                } else {
                    map.put(val, map.get(val) - 1);
                }
            }
            balls.put(ball, color);
            map.put(color, map.getOrDefault(color, 0) + 1);
            res[i] = map.size();
        }
        
        return res;
    }
}

物块放置查询

Leetcode 物块放置查询

有一条无限长的数轴,原点在 0 处,沿着 x 轴 方向无限延伸。
给你一个二维数组 queries ,它包含两种操作:

  1. 操作类型 1 :queries[i] = [1, x] 。在距离原点 x 处建一个障碍物。数据保证当操作执行的时候,位置 x 处 没有 任何障碍物。
  2. 操作类型 2 :queries[i] = [2, x, sz] 。判断在数轴范围 [0, x] 内是否可以放置一个长度为 sz 的物块,这个物块需要 完全 放置在范围 [0, x] 内。如果物块与任何障碍物有重合,那么这个物块 不能 被放置,但物块可以与障碍物刚好接触。注意,你只是进行查询,并 不是 真的放置这个物块。每个查询都是相互独立的。

请你返回一个 boolean 数组results ,如果第 i 个操作类型 2 的操作你可以放置物块,那么 results[i] 为 true ,否则为 false 。

第 131 场双周赛_4.png

对于操作类型 1,添加障碍物,将其放入一个数组中,存储障碍物的坐标,并保证坐标是递增的。
对于操作类型2,判断是否能放置物块,在障碍物数组中遍历到查询的位置,判断障碍物之间的间距是否大于等于物块的长度。

完整代码

class Solution {
    public List<Boolean> getResults(int[][] queries) {
        List<Integer> barries = new LinkedList<Integer>();
        List<Boolean> res = new ArrayList<Boolean>();
        
        for (int i = 0; i < queries.length; i++) {
            if (queries[i].length == 2) {
                // 加障碍
                int index = 0;
                while (index < barries.size() && queries[i][1] > barries.get(index)) {
                    index++;
                }
                barries.add(index, queries[i][1]);
            } else {
                int tag = 0;
                // 判断是否可放入
                if (queries[i][2] > queries[i][1]) {
                    res.add(false);
                    continue;
                }
                int before = 0;
                for (Integer num : barries) {
                    if (num > queries[i][1]) break;
                    if ((num - before) >= queries[i][2]) {
                        tag = 1;
                        break;
                    }
                    before = num;
                }
                if ((queries[i][1] - before) >= queries[i][2]) tag = 1;
                
                if (tag == 1) res.add(true);
                else res.add(false);
            }
        }
        
        return res;
    }
}

以上解法超出时间限制(2D9F7D09.png

优化方案

  1. 插入障碍物的坐标时,目前使用从 0 开始遍历插入,可以使用更优查找算法查找插入位置,比如二分查找。
  2. 添加一个数组保存障碍物位置之前能放入的物块的最大宽度。然后同样使用查找算法查找搜索坐标的前一个障碍物保存的最大宽度,再加上自己与前一个障碍物之间的距离,一起进行判断。
  • 此优化方案加入待办,之后实现

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

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

相关文章

【698协议】帧校验算法

698协议&#xff0c;帧校验算法 帧格式 帧校验范围 校验算法 #include "fcs16.h" /* * u16 represents an unsigned 16-bit number. Adjust the typedef for * your hardware. * Drew D. Perkins at Carnegie Mellon University. * Code liberally borrowed from M…

mac操作系统下,docker登录nexus私库,提示不支持https协议的错误

一、背景 我们使用nexus搭建了一个Docker Registry私有仓库&#xff0c;在Mac操作系统&#xff0c;在推送本地镜像到私库前&#xff0c;要求我们登录私库&#xff0c;报错如下&#xff1a; docker login 192.168.5.6:8086 -u username -p passwordWARNING! Using --password …

【idea插件】查询maven小工具——maven-search

1、简介 该插件提供一个查询工具方便在IDE中快速查找maven依赖&#xff0c;定制模糊查找算法。支持查找全网类。注&#xff1a;该功能需要连接网络。所有数据来源于源码阅读网 2、使用方法 开启菜单&#xff1a;Tools / Maven Search 快捷键 &#xff1a;Shift Control M 或…

vue源码之mustache简易版 --- 完

前面已经实现了 模板字符串转化为 tokens &#xff0c;这篇我们将实现 tokens 到 dom字符串的转化 1.获取对象嵌套的数据 当出现一个需要展示的数据为被多层对象嵌套时&#xff0c;由于js不支持 data[a.b],使得无法获取需要展示的数据&#xff0c;所以需要进行必要的处理 loo…

算法的时间与空间复杂度

算法是指用来操作数据、解决程序问题的一种方法。对于同一问题&#xff0c;使用不同的算法&#xff0c;也许最终结果是一样的&#xff0c;但在过程中消耗的资源和时间却会有很大的区别。 那我们该如何去衡量不同算法之间的优劣呢&#xff1f;主要还是从算法所占用的【时间】和…

Anaconda+CUDA+CUDNN+Pycharm+Pytorch安装教程(第一节 Anconda安装)

1.选择和对应的anconda版本 官网地址&#xff1a;Index of / (anaconda.com) 下载地址&#xff1a;Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 2.安装流程 (1)下载安装包 (2)点击next &#xff08;3&#xff09;点击I agree &a…

MySQL--联合索引应用细节应用规范

目录 一、索引覆盖 1.完全覆盖 2.部分覆盖 3.不覆盖索引-where条件不包含联合索引的最左则不覆盖 二、MySQL8.0在索引中的新特性 1.不可见索引 2.倒序索引 三、索引自优化--索引的索引 四、Change Buffer 五、优化器算法 1.查询优化器算法 2.设置算法 3.索引下推 …

【Java】/*类和对象(上)*/

目录 一、什么是类&#xff0c;什么是对象 二、类和对象的关系 三、学习类和对象的目的 四、怎样创建一个类 4.1 语法形式 4.2 创建示例 示例一&#xff1a;日期对象 示例二&#xff1a;小狗对象 示例三&#xff1a;学生对象 4.3 注意事项 4.4 修改public修饰的主类…

css卡片翻转 父元素翻转子元素不翻转效果

css卡片翻转 父元素翻转子元素不翻转效果 vue <div class"moduleBox"><div class"headTitle"><span class"headName">大额案例</span></div><div class"moduleItem"><span class"module…

java 拦截器-用户无操作超时退出利用Redis

1、授权过滤&#xff0c;只要实现AuthConfigAdapter接口 2、利用Redis token超时时间&#xff0c;用户访问后台续时 效果 Component public class AuthFilter implements Filter {private static Logger logger LoggerFactory.getLogger(AuthFilter.class);Autowiredprivat…

《python编程从入门到实践》day39

# 昨日知识点回顾 创建主页、继承模版、显示特定主题页面 # view.py from django.shortcuts import render# 导入所需数据相关联的模型 from .models import Topic# Create your views here. def index(request):"""学习笔记的主页"""#…

GB报文中的Cseq值的注意点

一、 问题现象 【问题现象】NVR使用GB接三方平台发现倍速回放时&#xff0c; 【现场拓扑】现场拓扑如下 &#xff08;1&#xff09; NVR侧使用家用宽带的方式&#xff0c;通过国标跨公网接入三方平台。 图1.1&#xff1a;网络拓扑 二、 抓包分析 INVITE sip:420000004013200…

ABC354学习笔记

高桥有一棵植物&#xff0c;这个植物在第 0 0 0 天时高度为 0 c m 0\,\mathrm{cm} 0cm&#xff0c;此后的第 i i i 天&#xff0c;他的植物会增高 2 i c m 2^i\,\mathrm{cm} 2icm。 高桥身高为 H c m H\,\mathrm{cm} Hcm。 高桥想知道在第几天&#xff0c;他的植物的高度会…

grpc、多集群、多租户

gRPC和服务发现 一个A high-performance, open-source universal RPC framework&#xff0c;高性能、开源的通用 RPC 框架。使用protobuf 语言基于文件定义服务&#xff0c;通过 proto3 工具生成指定语言的数据结构、服务端接口以及客户端 Stub。移动端上面则是基于标准的 HTTP…

专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(十三)

本系列课程&#xff0c;将重点讲解Phpsploit-Framework框架软件的基础使用&#xff01; 本文章仅提供学习&#xff0c;切勿将其用于不法手段&#xff01; 接上一篇文章内容&#xff0c;讲述如何进行Phpsploit-Framework软件的基础使用和二次开发。 我们&#xff0c;继续讲一…

如何将前端项目打包并部署到不同服务器环境

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学&#xff0c;可以点心心支持一下哈&#xff08;笔记是根据b站尚硅谷的前端讲师【张天禹老师】整理的&#xff0c;用于自己复盘&#xff0c;有需要学习的可以去b站学习原版视频&…

three.js判断物体在人的前面,还是后面

three.js判断物体在人的前面&#xff0c;还是后面 const player new THREE.Vectors(10, 0, 5); const mesh new THREE.Vectors(15, 0, 6);上面&#xff0c;两个变量分别表示&#xff0c;玩家的位置&#xff0c;物体的位置。 从这发现&#xff0c;当玩家和物体的角度关系 小…

网络协议——RTSP(简介、搭建RTSP服务器)

一、简介 1、什么是RTSP RTSP&#xff08;Real-Time Streaming Protocol&#xff0c;实时流传输协议&#xff09;是一种网络应用协议&#xff0c;旨在用于在互联网上进行娱乐和通信的实时流媒体的控制。它允许客户端远程控制媒体服务器上的流媒体播放&#xff0c;例如播放、暂…

决定新泽西州版图的关键历史事件

决定新泽西州版图的关键历史事件 1. *民地建立&#xff1a;1664年&#xff0c;新泽西成为英国*民地。该地区原为荷兰*民地的一部分&#xff0c;但同年根据英王查理二世的赐予&#xff0c;转归给了他的兄弟约克公爵&#xff08;后来的詹姆士二世&#xff09;&#xff0c;之后又被…

Matlab 结构光相移法(单频多相)

文章目录 一、简介1、基于点的测距2、基于条纹的测距二、条纹编码2.1 二进制编码2.2相移法三、实现代码参考文献一、简介 在介绍相移法之前,我们需要先了解一下为啥会有相移法,了解了其来龙去脉,则更容易去应用它。 1、基于点的测距 首先我们从点的测距开始,这有点类似于立…