LeetCode --- 413周赛

news2024/9/17 3:07:26

题目列表

3274. 检查棋盘方格颜色是否相同

3275. 第 K 近障碍物查询

3276. 选择矩阵中单元格的最大得分

3277. 查询子数组最大异或值

一、检查棋盘方格颜色是否相同

题目给定两个字符串来表示两个方格的坐标,让我们判断这两个方格的颜色是否相同,这里我们要观察棋盘的颜色特征,我们就会发现奇数行的奇数列和偶数行的偶数列是黑色,其他都是白色,所以我们可以直接计算出每个方格的颜色,代码如下

class Solution {
public:
    bool checkTwoChessboards(string coordinate1, string coordinate2) {
        // 只要考虑坐标的奇偶性即可
        int x1 = (coordinate1[0] - 'a' + 1) % 2;
        int y1 = (coordinate1[1] - '0') % 2;
        int x2 = (coordinate2[0] - 'a' + 1) % 2;
        int y2 = (coordinate2[1] - '0') % 2;
        return (x1 == y1 && x2 == y2) || (x1 != y1 && x2 != y2);
    }
};

二、第k近障碍物查询

看到这个题目,我们就应该想到 215. 数组中的第K个最大元素 这个经典的题目,可以用堆来实现,这题也是同理,我们可以借助堆来维护第 k 近的障碍物,代码如下

class Solution {
public:
    vector<int> resultsArray(vector<vector<int>>& queries, int k) {
        int n = queries.size();
        vector<int> ans(n, -1);
        priority_queue<int> pq; // 大堆
        for(int i = 0; i < n; i++){
            int x = abs(queries[i][0]), y = abs(queries[i][1]);
            pq.push(x + y);
            if(pq.size() > k){
                pq.pop();
            }
            if(pq.size() == k) 
                ans[i] = pq.top();
        }
        return ans;
    }
};

三、选择矩阵中单元格的最大得分

这题的一般思路就是枚举每一行,依次决定每一行选什么数,同时记录下每一行选的数来判断剩余的行中不能选的数字有哪些。这个思路没问题,但是我们如何快速的记录每一行选的数呢?数字的范围为1~100,100个数的选择状态有 2^100 个,很显然会超时,那该如何做?

我们在仔细看一眼题目,除了枚举行,我们同样可以枚举选的数字,这样的好处是由于矩阵最多只有10行,我们可以用一个int类型的变量来记录哪些行被使用过了(共有2^10个状态),大大降低了时间复杂度。

具体思路如下:我们从大到小枚举出现过的数,对于每一个数,我们可以选,也可以不选,如果选,那么我们就枚举它出现过的行有哪些,返回最大值即可,代码如下

class Solution {
public:
    int maxScore(vector<vector<int>>& grid) {
        int n = grid.size(), m = grid[0].size();
        unordered_map<int, int> pos; // 预处理出每个数字出现的行有哪些
        for(int i = 0; i < n; i++){
            for(int j = 0; j < m; j++){
                pos[grid[i][j]] |= (1<<i); // 用二进制来记录数字出现的行数有哪些
            }
        }
        vector<int> nums; // 记录grid中出现的数字
        for(auto &[x,_]: pos){
            nums.push_back(x);
        }
        ranges::sort(nums);
        
        int memo[nums.size()][1<<10];
        memset(memo, -1, sizeof(memo));
        function<int(int,int)> dfs = [&](int i, int j)->int{
            if(i < 0) return 0;
            if(memo[i][j] != -1) return memo[i][j];
            int res = dfs(i - 1, j); // 不选
            int x = nums[i]; // 选
            for(int t = pos[x], lb; t; t ^= lb){ // 用来枚举 x 出现过的行
                lb = t & -t; // 获取到二进制中的最右边的1
                if(j & lb) continue; // 如果结果不为 0,说明当前行已经被选过了
                res = max(res, dfs(i - 1, j | lb) + x);
            }
            return memo[i][j] = res;
        };
        return dfs(nums.size()-1, 0);
    }
};

四、查询子数组最大异或值

首先我们要去看看异或值的求法,并去找找规律,如下图

在算出所有区间的异或值后,我们还要计算出任意区间的子数组的最大异或值,依旧可以用动规来做,设 dp[i][j] 表示区间内的最大异或值,则 dp[i][j] = max( dp[i][j-1],dp[i+1][j],f[i][j] ),代码如下

class Solution {
public:
    vector<int> maximumSubarrayXor(vector<int>& nums, vector<vector<int>>& queries) {
        int n = nums.size(), m = queries.size();
        vector<vector<int>> f(n, vector<int>(n));
        auto dp = f;
        // f[i][j] = f[i][j-1] ^ f[i+1][j]
        // dp[i][j] = max(dp[i][j-1], dp[i+1][j], f[i][j])
        for(int i = n - 1; i >= 0; i--){
            dp[i][i] = f[i][i] = nums[i];
            for(int j = i + 1; j < n; j++){
                f[i][j] = f[i][j-1] ^ f[i+1][j];
                dp[i][j] = max({dp[i][j - 1], dp[i+1][j], f[i][j]});
            }
        }
        vector<int> ans(m);
        for(int i = 0; i < m; i++){
            int l = queries[i][0], r = queries[i][1];
            ans[i] = dp[l][r];
        }
        return ans;
    }
};

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

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

相关文章

C++——关联式容器(2):AVL树(平衡二叉树)

2.AVL树 2.1 AVL树的概念 在学习了二叉搜索树后&#xff0c;我们发现了二叉搜索树可以根据大小比较来进行类似于折半查找的操作&#xff0c;使得搜索时间复杂度达到logn的水准。但是在面对极端情况下&#xff0c;如近似有序的序列&#xff0c;那么整棵树的时间复杂度就有可能退…

【Godot4.3】多边形的斜线填充效果基础实现

概述 图案&#xff08;Pattern&#xff09;填充是一个非常常见的效果。其中又以斜线填充最为简单。本篇就探讨在Godot4.3中如何使用Geometry2D和CanvasItem的绘图函数实现斜线填充效果。 基础思路 Geometry2D类提供了多边形和多边形以及多边形与折线的布尔运算。按照自然的思…

Spring-@Bean的处理流程

Bean前置知识 1 需要再Configuration Class中才能被解析 2 静态Bean也就是标注在static方法上的 实例Bean标注在普通方法上的 所有的Bean在创建之前都会变成BeanDefinition,其中有这样两个属性&#xff1a; setFactoryMethodName&#xff1a;静态方法 setFactoryBeanName&…

【详解 Java 注解】

前言&#xff1a; 注解&#xff08;Annotation&#xff09;是Java中的一种特殊符号&#xff0c;用来为代码提供额外的信息。它不会改变程序的逻辑&#xff0c;只是用来给编译器或工具提供指示。例如&#xff0c;Override 表示一个方法是重写了父类的方法&#xff0c;Deprecated…

[论文笔记]LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale

引言 今天带来第一篇量化论文LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale笔记。 为了简单&#xff0c;下文中以翻译的口吻记录&#xff0c;比如替换"作者"为"我们"。 大语言模型已被广泛采用&#xff0c;但推理时需要大量的GPU内…

GPU 带宽功耗优化

移动端GPU 的内存结构&#xff1a; 先简述移动端内存cache结构&#xff1b;上图的UMA结构 on-Chip memory 包括了 L1、L2 cache&#xff0c;非常关键的移动端的 Tiles 也是保存在 on-chip上还包括寄存器文件&#xff1a;提供给每个核心使用的极高速存储。 共享内存&#xff08…

【C/C++】web服务器项目开发总结【请求 | 响应 | CGI】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 一&#xff0c;背景 二&…

机器学习(西瓜书)第 4 章 决策树

4.1 决策树基本流程 决策树模型 基本流程 在第⑵种情形下&#xff0c;我们把当前结点标记为叶结点&#xff0c;并将其类别设定为该结点所含样本最多的类别&#xff1b;在第⑶种情形下&#xff0c;同样把当前结点标记为叶结点&#xff0c;但将其类别设定为其父结点所含样本最多…

VMware时提示系统尚未修改安装失败

安装VMware安装失败&#xff0c;提示系统尚未修改 有以下解决方案&#xff1a; 1.操作系统不兼容 2.安装文件损坏 3.安装程序错误 4.硬件问题 解决&#xff1a;由于重装系统前&#xff0c;安装过VAware&#xff0c;所以应该操作系统&#xff0c;硬件没有问题。下载一个软件v…

多线程篇(阻塞队列- ArrayBlockingQueue)(持续更新迭代)

目录 一、源码分析 1. 先看个关系图 2. 构造方法 3. 核心属性 4. 核心功能 入队&#xff08;放入数据&#xff09; 出队&#xff08;取出数据&#xff09; 5. 总结 一、源码分析 1. 先看个关系图 PS&#xff1a;先看个关系图 ArrayBlockingQueue是最典型的有界阻塞队…

CSDN文章无水印转成PDF

文章目录 一、打开检查二、点击进入控制台三、在控制台中输入代码 一、打开检查 f11或者右键打开检查 二、点击进入控制台 三、在控制台中输入代码 (function(){ use strict;var articleBox $("div.article_content");articleBox.removeAttr("style&quo…

sping boot 基于 RESTful 风格,模拟增删改查操作

RESTful -> 增&#xff1a;post 删&#xff1a;delete 改: put 查: get RESTful 资源路径&#xff0c;一般以 s 复数结尾 以下是代码示例&#xff1a; package com.example.springboot.controller;import org.springframework.web.bind.annotation.*;RestControll…

EmguCV学习笔记 C# 9.3 移动检测类

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

汽车网络安全的未来:将车辆视为端点

汽车行业面临着许多与其他行业的成功企业相同的网络安全风险和威胁&#xff0c;但它也在应对一些独特的风险和威胁。 Nuspire 的首席威胁分析师 Josh Smith&#xff08;一家在汽车领域有着深厚根基并保护通用汽车和斯巴鲁等客户的托管安全服务提供商&#xff09;谈到了当前的风…

【AcWing】852. spfa判断负环

#include<iostream> #include<algorithm> #include<cstring> #include<queue> using namespace std;const int N 1e510;int n,m; int h[N],w[N],e[N],ne[N],idx; int dist[N],cnt[N];//cnt存最短路径的边数 bool st[N];void add(int a,int b,int c){e[…

一文讲懂扩散模型

一文讲懂扩散模型 扩散模型&#xff08;Diffusion Models, DM&#xff09;是近年来在计算机视觉、自然语言处理等领域取得显著进展的一种生成模型。其思想根源可以追溯到非平衡热力学&#xff0c;通过模拟数据的扩散和去噪过程来生成新的样本。以下将详细阐述扩散模型的基本原理…

发动机制造5G智能工厂工业物联数字孪生平台,推进制造业数字化转型

发动机制造作为高端制造业的核心领域之一&#xff0c;正积极探索并引领这一变革。其中&#xff0c;发动机制造5G智能工厂物联数字孪生平台的兴起&#xff0c;不仅为发动机制造业注入了新的活力&#xff0c;也为整个制造业的数字化转型树立了新的标杆。发动机制造5G智能工厂物联…

Linux Centos 7网络配置

本步骤基于Centos 7&#xff0c;使用的虚拟机是VMware Workstation Pro&#xff0c;最终可实现虚拟机与外网互通。如为其他发行版本的linux&#xff0c;可能会有差异。 1、检查外网访问状态 ping www.baidu.com 2、查看网卡配置信息 ip addr 3、配置网卡 cd /etc/sysconfig…

致远个性化之--发起流程页面,去掉【查看流程】按钮

需求 近期在做的项目中&#xff0c;遇到一个需求&#xff0c;想把发起流程页面中的【查看流程】按钮去掉&#xff0c;只让员工预测流程&#xff0c;知道自己的事项流程走向&#xff0c;不让看全局流程图。包含PC端和移动端&#xff0c;以及微协同端。 如下图效果示例&#xff1…

SVN下载安装使用方法

目录 &#x1f315;SVN是什么&#xff1f;&#x1f319;SVN跟Git比的优势&#x1f319;SVN的用处 &#x1f315;下载安装使用方法 &#x1f315;&#x1f319;⭐ &#x1f315;SVN是什么&#xff1f; 代码版本管理工具 它能记住你每次的修改 查看所有的修改记录 恢复到任何历…