Leetcode - 周赛413

目录

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

二,3275. 第 K 近障碍物查询

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

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


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

本题就是找规律,假设白色是true,黑色是false,可以发现 a - 2 4 6 8,b - 1 3 5 7 是白色,也就是说可以通过 (x - 'a')% 2 == (y - '0')%2 来判断该点是什么颜色,再返回两个点颜色是否相同。

代码如下:

class Solution {//a - 2 4 6 8//b - 1 3 5 7//c - 2 4 6 8//白public boolean checkTwoChessboards(String c1, String c2) {boolean a = (c1.charAt(0)-'a')%2 == (c1.charAt(1)-'0')%2;boolean b = (c2.charAt(0)-'a')%2 == (c2.charAt(1)-'0')%2;return a == b;}
}

二,3275. 第 K 近障碍物查询

本题是一种常见的堆应用问题(Top k 问题),维护第 k 小使用最大堆,维护第 k 大使用最小堆。本题求第 k 小的距离,所以使用最大堆。通过维护堆的大小来达到目的。

代码如下:

class Solution {public int[] resultsArray(int[][] queries, int k) {int n = queries.length;int[] ans = new int[n];PriorityQueue<Integer> que = new PriorityQueue<>((x,y)->y-x);for(int i=0; i<n; i++){que.offer(Math.abs(queries[i][0]) + Math.abs(queries[i][1]));if(que.size() > k)que.poll();ans[i] = que.size() == k ? que.peek() : -1;}return ans;}
}

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

本题可以使用枚举选哪个来做,枚举每一行可以选取的数字,求出所有组合中的最大得分,可以这样定义 dfs(i,j):前 i 行可以获得的最大得分,j表示已经选举过的数字。代码如下:

//超时写法
//Java无法支持长度为100的整形,所以这里用py写的
class Solution:def maxScore(self, grid: List[List[int]]) -> int:@cachedef dfs(i: int, x: int) -> int:if i < 0: return 0res = dfs(i-1, x)for j in range(len(grid[0])):y = grid[i][j]if x >> y & 1: continueres = max(res, dfs(i-1, x|1<<y) + y)return resdfs.cache_clear()ans = dfs(len(grid)-1, 0)return ans 

但是该算法的时间复杂是O(n^2*2^100),这个做法明显超时了,那么我们要如何来降低时间复杂度?

之前有场周赛可以提供一点思路,就是如果枚举下标超时,那么我们是否可以尝试枚举值呢?对于本题来说,矩阵的数据范围是1~100,此时它的时间复杂度就变成了O(mn * 2 ^ n),我们可以使用选或不选的思路,定义dfs(i,j):在 [1,i] 区间选择数字,且该数字不会出现在 j 集合中,此时所选元素的最大值之和。

  • 对于 i,如果不选,那么接下来就变成从 [1,i-1] 区间选择数字,且该数字不会出现在 j 集合中,此时所选元素的最大值之和,状态表示为 dfs(i-1,j)
  • 对于 i,如果选,假设该值在 k 行(在dfs之前要预处理每个值所在的行),那么接下来就变成从 [1,i-1] 区间选择数字,且该数字不会出现在 j U k 集合中,此时所选元素的最大值之和,状态表示为 dfs(i-1,j|1<<k)

代码如下:

class Solution {public int maxScore(List<List<Integer>> grid) {List<Integer>[] pos = new ArrayList[101];Arrays.setAll(pos, e -> new ArrayList<>());for(int i=0; i<grid.size(); i++){Set<Integer> set = new HashSet<>();for(int x : grid.get(i))set.add(x);for(int x : set)pos[x].add(i);}memo = new int[101][1<<grid.size()];for(int i=0; i<101; i++)Arrays.fill(memo[i], -1);return dfs(100, 0, pos);}int[][] memo;int dfs(int i, int j, List<Integer>[] pos){if(i == 0) return 0;if(memo[i][j] != -1) return memo[i][j];int res = dfs(i-1, j, pos);for(int x : pos[i]){if((j>>x&1) == 1) continue;res = Math.max(res, dfs(i-1, j|1<<x, pos) + i);}return memo[i][j] = res;}
}

递推版本:

class Solution {public int maxScore(List<List<Integer>> grid) {List<Integer>[] pos = new ArrayList[101];Arrays.setAll(pos, e -> new ArrayList<>());for(int i=0; i<grid.size(); i++){Set<Integer> set = new HashSet<>();for(int x : grid.get(i))set.add(x);for(int x : set)pos[x].add(i);}int[][] f = new int[101][1<<grid.size()];for(int i=1; i<101; i++){for(int j=0; j<1<<grid.size(); j++){f[i][j] = f[i-1][j];for(int x : pos[i]){if((j>>x&1) == 1) continue;f[i][j] = Math.max(f[i][j], f[i-1][j|1<<x] + i);}}}return f[100][0];}
}

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

本题可以通过模拟每一步的过程来得到一个递推公式,如图所示:

根据该公式我们可以得到任意一个区间的异或值,那么要如何计算 [L,R] 区间子数组的最大异或值呢?这里也可以使用区间dp,mx[i][j]:[i,j] 区间的子数组的最大异或值,mx[i][j] = max(f[i][j],mx[i][j-1],mx[i+1][j]),画个图理解一下:

代码如下:

class Solution {public int[] maximumSubarrayXor(int[] nums, int[][] queries) {int n = nums.length;int[][] f = new int[n][n];//f[i][j] = f[i+1][j]^f[i][j-1];int[][] mx = new int[n][n];//mx[i][j] = max(f[i][j], max(mx[i+1][j], mx[i][j-1]))for(int i=n-1; i>=0; i--){f[i][i] = mx[i][i] = nums[i];for(int j=i+1; j<n; j++){f[i][j] = f[i+1][j]^f[i][j-1];mx[i][j] = Math.max(f[i][j], Math.max(mx[i+1][j], mx[i][j-1]));}}int[] ans = new int[queries.length];for(int i=0; i<queries.length; i++){ans[i] = mx[queries[i][0]][queries[i][1]];}return ans;}
}

 

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

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

相关文章

EPLAN中如何将图纸导出为PDF文件并设置页边距?

EPLAN中如何将图纸导出为PDF文件并设置页边距? 如下图所示,在项目中选中需要导出的图纸页, 如下图所示,点击上方页-----导出------PDF, 如下图所示,在弹出的窗口中设置导出文件的名称、输出目录、输出颜色,这里建议勾选“使用打印边距”, 如下图所示,继续点击下方的设…

论文速读|重新审视奖励设计与评估:用于强健人型机器人站立与行走控制的方法

论文地址&#xff1a;https://arxiv.org/pdf/2404.19173 这篇论文为类人机器人站立和行走&#xff08;SaW&#xff09;控制器的持续可衡量改进奠定了基础。通过引入一套定量实际基准测试方法&#xff0c;作者展示了现有控制器的优缺点&#xff0c;并通过基准测试指导新控制器的…

论文速读|自然语言的最优控制合成:机遇与挑战

项目地址&#xff1a;Optimal Control Synthesis from Natural Language: Opportunities and Challenges 介绍了一种从自然语言自动生成最优控制器的框架&#xff0c;该框架主要包括以下几个步骤&#xff1a;首先&#xff0c;通过人类用户提供的初始文本和系统描述&#xff0c;…

源代码如何防泄露?做好这十条轻松应对

源代码防泄露是一个多方面的安全问题&#xff0c;涉及到技术、管理和物理等多个层面。以下是一些有效的策略和方法&#xff0c;结合深信达的SDC防泄密软件&#xff0c;来实现源代码的防泄露&#xff1a; 1. **访问控制**&#xff1a;实施基于角色的访问控制&#xff08;RBAC&am…

JUC-无锁之CAS

问题提出 (应用之互斥) package cn.itcast; import java.util.ArrayList; import java.util.List; interface Account {// 获取余额Integer getBalance();// 取款void withdraw(Integer amount);/*** 方法内会启动 1000 个线程&#xff0c;每个线程做 -10 元 的操作* 如果初始…

深度学习系列73:使用rapidStructure进行版面分析

1. 概述 项目地址https://github.com/RapidAI/RapidStructure?tabreadme-ov-file 2. 文档方向分类示例 安装$ pip install rapid-orientation import cv2 from rapid_orientation import RapidOrientation orientation_engine RapidOrientation() img cv2.imread(test_im…

C++笔记---string类(简单地使用)

1. string类介绍 string类是C标准库中给出的一种类类型&#xff0c;其目的是为了代替C语言中的字符串。 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是…

【时时三省】(C语言基础)指针进阶 例题

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 字符数组例题&#xff1a; arr后面放了六个字符 所以这个数组的元素个数就是6 第一个arr 因为他计算的是一整个数组的大小 就是打印6 第二个arr0 arr没有单独放在它的内部 所以它计算的就是…

深智城基于超融合数据库MatrixOne的一站式交通大数据平台改造

在智慧交通应用中&#xff0c;数据处理需求极为复杂&#xff0c;涉及人、车辆、道路和环境等多个方面&#xff0c;产生了大量异构数据。交通管理人员需要对这些数据进行实时分析和决策&#xff0c;以应对各种交通事件。然而&#xff0c;在实际生产中会发现数据处理缺陷、管理复…

智慧平台赋能政务管理,声通科技助力政务管理智能化

在智能时代的大潮中&#xff0c;政务管理也在不断寻求创新与突破&#xff0c;在这方面&#xff0c;涌现出了很多优秀的公司。比如声通科技的子公司西安金讯数智信息技术有限公司&#xff0c;就在AI政务热线领域有很多创新成果&#xff0c;为政务管理的智能化升级提供了新思路。…

windows安装php7.4

windows安装php7.4 1.通过官网下载所需的php版本 首先从PHP官网&#xff08;https://www.php.net/downloads.php&#xff09;或者Windows下的PHP官网&#xff08;http://windows.php.net/download/&#xff09;下载Windows版本的PHP安装包。下载后解压到一个路径下。 2.配…

爆改YOLOv8|利用yolov10的PSA注意力机制改进yolov8-高效涨点

1&#xff0c;本文介绍 PSA是一种改进的自注意力机制&#xff0c;旨在提升模型的效率和准确性。传统的自注意力机制需要计算所有位置对之间的注意力&#xff0c;这会导致计算复杂度高和训练时间长。PSA通过引入极化因子来减少需要计算的注意力对的数量&#xff0c;从而降低计算…

视频汇聚平台LntonAIServer视频质量诊断功能--偏色检测与噪声检测

随着视频监控技术的不断进步&#xff0c;视频质量成为了决定监控系统性能的关键因素之一。LntonAIServer新增的视频质量诊断功能&#xff0c;特别是偏色检测和噪声检测&#xff0c;进一步强化了视频监控系统的可靠性和实用性。下面我们将详细介绍这两项功能的技术细节、应用场景…

window系统开机执行bat脚本

1&#xff0c;win R 打开运行对话框&#xff0c;然后如下图所示输入 第二&#xff0c;打开启动文件夹后&#xff0c;将想要执行的bat脚本&#xff0c;创建快捷方式&#xff0c;放在这里&#xff0c;重启电脑时就会执行这个程序

【Canvas与纹饰】环形小蜜蜂纹饰

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>环形小蜜蜂纹饰</title><style type"text/css"&g…

《OpenCV计算机视觉》—— 模板匹配

文章目录 一、模板匹配简单介绍二、三个主要函数的介绍1.执行模板匹配函数-cv2.matchTemplate()2.查找最佳匹配函数-cv2.minMaxLoc()3.在原图上绘制匹配区域函数-cv2.rectangle() 三、代码实现 一、模板匹配简单介绍 在Python中&#xff0c;模板匹配是一种在图像中查找与给定模…

【Next】4. 全局通用布局快速搭建

笔记来源&#xff1a;编程导航 基础布局 Next.js 支持全局根布局&#xff08;每个页面都会生效&#xff09;以及嵌套布局&#xff08;可以只对部分页面生效&#xff09;&#xff0c;详情可 参考文档。 在 src 下新建 layouts 目录&#xff0c;用于存放项目中的各种布局。在该目…

无法访问Github?Steam++来帮你

前言 有许多小伙伴发现在国内访问Github真的真的很难&#xff0c;毕竟Github的DNS很容易就被***。 昨天还看到有小伙伴在群上聊天问&#xff1a;如何访问Github&#xff0c;实际上你只需要安装个加速器&#xff0c;或者使用国内的镜像站就可以轻松访问。 当然&#xff0c;如…

【面试八股总结】MySQL 锁:全局锁、表级锁、行级锁

1. 全局锁 顾名思义&#xff0c;全局锁就是对整个数据库实例加锁。 MySQL 提供了⼀个加全局读锁的方法&#xff1a; flush tables with read lock 释放全局锁&#xff0c;执行命令&#xff1a; unlock tables 需要让整个库处于只读状态的时候&#xff0c;可以使用全局锁命…

用AI将你变成二次元角色!——Face Cartoon API 使用教程

人像动漫化 API 对接说明 本文将介绍一种通过输入一张人脸照片&#xff0c;生成个性化的二次元动漫形象&#xff0c;可用于打造个性头像、趣味活动、特效类应用等场景&#xff0c;提升社交娱乐的体验。 接下来介绍下 人像动漫化 API 的对接说明。 注册试用链接 注册试用链接…