LeetCode --- 139双周赛

题目列表

3285. 找到稳定山的下标

3286. 穿越网格图的安全路径

3287. 求出数组中最大序列值

3288. 最长上升路径的长度

一、找到稳定山的下标

遍历数组,统计符合要求的答案即可,代码如下

class Solution {
public:vector<int> stableMountains(vector<int>& height, int threshold) {vector<int> ans;int n = height.size();for(int i = 1; i < n; i++){if(height[i-1] > threshold){ans.push_back(i);}}return ans;}
};

 二、穿越网格图的安全路径

题目意思就是要求找到一条路径,要求路径上的1的个数最少,可以将给定的表格看成一张图,每个格子的值,就是相邻点到达该点的边权,要求最短路径,很显然,可以用Dijkstra算法来求解,代码如下

class Solution {const int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
public:bool findSafeWalk(vector<vector<int>>& grid, int health) {int n = grid.size(), m = grid[0].size();vector<vector<int>>dist(n, vector<int>(m, INT_MAX));priority_queue<tuple<int,int,int>,vector<tuple<int,int,int>>, greater<>> pq; // [d,x,y]pq.emplace(grid[0][0], 0, 0);dist[0][0] = grid[0][0];while(pq.size()){auto [d, x, y] = pq.top(); pq.pop();if(d != dist[x][y]) continue;for(auto [i, j]: dir){int dx = x + i, dy = y + j;if(dx < 0 || dx >= n || dy < 0 || dy >= m)continue;if(dist[dx][dy] > dist[x][y] + grid[dx][dy]){dist[dx][dy] = dist[x][y] + grid[dx][dy];pq.emplace(dist[dx][dy], dx, dy);}}}return dist.back().back() < health;}
};

但其实我们可以不用priority_queue,我们直接用deque就行,它只有0/1两个边权,我们只要将0边权的点进行头插,1边权的点进行尾插,这样我们每次拿到的结点就是路径长度最少的,代码如下

class Solution {const int dir[4][2] = {1,0,-1,0,0,1,0,-1};
public:bool findSafeWalk(vector<vector<int>>& grid, int health) {int n = grid.size(), m = grid[0].size();deque<pair<int,int>> dq; dq.emplace_back(0, 0);vector<vector<int>> dist(n, vector<int>(m, INT_MAX));dist[0][0] = grid[0][0];while(dq.size()){auto [x, y] = dq.front(); dq.pop_front();for(int i = 0; i < 4; i++){int dx = x + dir[i][0];int dy = y + dir[i][1];if(dx < 0 || dx >= n || dy < 0 || dy >= m) continue;int cost = grid[dx][dy];if(dist[dx][dy] > dist[x][y] + cost){dist[dx][dy] = dist[x][y] + cost;cost == 0 ? dq.emplace_front(dx, dy) : dq.emplace_back(dx, dy);}}}return dist[n-1][m-1] < health;}
};

三、求出数组中最大序列值

这题根据数据范围,可以将seq分成前后两个部分,分别计算出能得到的所有的or值,然后暴力枚举所有可能的xor值,返回最大值即可。

如何计算前缀/后缀中选择的k个数能组成哪些数?

以前缀为例子:我们设f[i][j][x] 表示 能否从前 i 个数中选出 j 个数组成 x

从选或不选两个角度来思考,状态转移方程为 f[i][j][x] = f[i-1][j][x] | f[i-1][j-1][?],其中 ?表示所有与nums[i]进行或运算得到 x 的数,这显然是很难进行枚举的,但是我们却能很容易知道 x|nums[i] 的结果是什么,所以这里的状态转移方程改为 f[i][j][x] = f[i-1][j][x],f[i][j][x|v] = f[i-1][j-1][x],由于x|v的结果可能会重复,所以需要防止出现一开始结果为true,最后却被覆盖成false的情况,后缀的计算也是同理,代码如下

class Solution {const int MX = 1 << 7;
public:int maxValue(vector<int>& nums, int k) {// 前后缀分解:枚举前缀的or值,枚举后缀的or值,暴力枚举,得到最大xor// 如何求前缀or值?// f[i][j][x] 表示前i个数中选出j个数or,结果为x是否存在// 状态转移方程的表示:// 1、填表法// f[i][j][x] = f[i-1][j][x] | f[i-1][j-1][{...}]// 其中{...}表示 | nums[i] 能得到 x 的所有数字的集合// 2、刷表法// f[i][j][x] = f[i-1][j][x]// f[i][j][x|v] = f[i-1][j-1][x],其中 v = nums[i]int n = nums.size();bool pre[n + 1][k + 1][1<<7];memset(pre, 0, sizeof(pre));for(int i = 0; i <= n; i++) pre[i][0][0] = true;for(int i = 0; i < n; i++){int v = nums[i];for(int j = 1; j <= k; j++){for(int x = 0; x < MX; x++){pre[i+1][j][x] |= pre[i][j][x];pre[i+1][j][x|v] |= pre[i][j-1][x];}}}bool suf[n+1][k+1][1<<7];memset(suf, 0, sizeof(suf));for(int i = 0; i <= n; i++) suf[i][0][0] = true;for(int i = n - 1; i >= 0; i--){int v = nums[i];for(int j = 1; j <= k; j++){for(int x = 0; x < MX; x++){suf[i][j][x] |= suf[i+1][j][x];suf[i][j][x|v] |= suf[i+1][j-1][x];}}}int ans = 0;for(int i = k - 1; i < n - k; i++){ // [0, k), [k+1, n)for(int x = 0; x < MX; x++){if(pre[i + 1][k][x]){for(int y = 0; y < MX; y++){if(suf[i + 1][k][y]){ans = max(ans, x ^ y);}}}}}return ans;}
};

四、最长上升路径的长度

题意简单来说就是找二维的最长上升子序列,其中需要包含一个指定的点。这个和找最长上升子序列的思路是一样的,都是贪心+二分的思路,但是由于条件有所不同,实现也会有差异,具体请看代码,如下

class Solution {
public:int maxPathLength(vector<vector<int>>& coordinates, int k) {int kx = coordinates[k][0], ky = coordinates[k][1];// 根据横坐标进行排序,如果横坐标相同,则纵坐标大的排在前面// 这样在找最长递增子序列的时候,横坐标相同的点最多只能被选中一个ranges::sort(coordinates, [&](const auto& x, const auto& y){return x[0]!=y[0] ? x[0] < y[0] : x[1] > y[1];});vector<int> v;for(auto& coordinate: coordinates){int x = coordinate[0], y = coordinate[1];if(x < kx && y < ky || x > kx && y > ky){auto it = lower_bound(v.begin(), v.end(), y);if(it == v.end()) v.push_back(y);else *it = y;}}return v.size() + 1;}
};

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源免费】基于SpringBoot+Vue.JS服装商城系统(JAVA毕业设计)

本文项目编号 T 046 &#xff0c;文末自助获取源码 \color{red}{T046&#xff0c;文末自助获取源码} T046&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 新…

【C++】仿函数

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;C从小白到高手 &#x1f339;往期回顾&#x1f339;&#xff1a;【C】list常见用法 &#x1f516; 流水不争&#xff0c;争的是滔滔不息。 文章目录 一、仿函数的介绍…

网安面试会问到的:http的长连接和短连接

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

毕业设计选题:基于ssm+vue+uniapp的智能停车场管理系统小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

力扣中等 33.搜索旋转排序数组

文章目录 题目介绍题解 题目介绍 题解 首先用 153. 寻找旋转排序数组中的最小值 的方法&#xff0c;找到 nums 的最小值的下标 i。 然后分类讨论&#xff1a; 如果 target>nums[n−1]&#xff0c;在 [0,i−1] 中二分查找 target。 如果 target≤nums[n−1]&#xff0c;那…

fasterRCNN模型实现飞机类目标检测

加入会员社群&#xff0c;免费获取本项目数据集和代码&#xff1a;点击进入>> 关于python哥团队 我们是一个深度学习领域的独立工作室。团队成员有&#xff1a;中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等&#xff0c;曾在腾讯、百度、德勤等担任算法工程师…

Nginx静态资源优化、压缩、缓存处理

一、静态资源优化配置语法 Nginx对静态资源如何进行优化配置。这里从三个属性配置进行优化&#xff1a; sendfile on; tcp_nopush on; tcp_nodeplay on; &#xff08;1&#xff09;sendfile&#xff0c;用来开启高效的文件传输模式。 语法sendfile on |off;默认值sendfile …

【图像检索】基于Gabor特征的图像检索,matlab实现

博主简介&#xff1a;matlab图像代码项目合作&#xff08;扣扣&#xff1a;3249726188&#xff09; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于Gabor特征的图像检索&#xff0c;用matlab实现。 一、案例背景和算法介绍 这次博…

Java笔试面试题AI答之单元测试JUnit(7)

文章目录 37. 请列举一些JUnit扩展 &#xff1f;1. 参数化测试2. 条件测试执行3. 临时目录4. 时间测试5. 重复测试6. 前置/后置条件7. Mockito8. Spring Test9. JUnit Vintage10. Testcontainers11. 自定义注解和扩展12. 测试监听器&#xff08;TestListener 和 RunListener&am…

2024年数学建模比赛题目及解题代码

目录 一、引言 1. 1竞赛背景介绍 1.1.1数学建模竞赛概述 1.1.2生产过程决策问题在竞赛中的重要性 1.2 解题前准备 1.2.2 工具与资源准备 1.2.3 心态调整与策略规划 二、问题理解与分析 三、模型构建与求解 3.1 模型选择与设计 3.1.1 根据问题特性选择合适的数学模型类…

【永磁同步电机(PMSM)】 4. 坐标变换的 Matlab 仿真

【永磁同步电机&#xff08;PMSM&#xff09;】 4. 坐标变换的 Matlab 仿真 1. Clarke 变换的模型与仿真1.1 Clarke 变换1.2 Clarke 变换的仿真模型 2. Park 变换的模型与仿真2.1 Park 变换2.2 Park 变换的仿真模型 3. Simscape标准库变换模块3.1 abc to Alpha-Beta-Zero 模块3…

更换硬盘后,电脑装完系统进不去?或PE能识别硬盘但开机/启动/BIOS识别不了硬盘解决办法

由于现在的电脑主板&#xff0c;默认都是UEFI启动&#xff0c;硬盘只有使用GUID分区表&#xff0c;主板BIOS才找得到系统引导&#xff01; 而当我们拿到一块新硬盘&#xff0c;使用分区工具默认类型分区&#xff0c;默认是MBR类型&#xff0c;所以这种分区的硬盘&#xff0c;B…

14.面试算法-字符串常见算法题(三)

1. 字符串回文问题 1.1 LeetCode.125. 验证回文串 回文问题在链表中是重点&#xff0c;在字符串中同样是个重点。当初我去美团面试第一轮技术面的第一个算法题就是让写判断字符串回文的问题。 这个本身还是比较简单的&#xff0c;只要先转换成字符数组&#xff0c;然后使用双…

肺结节检测系统源码分享

肺结节检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件

uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件 日历期间、年期间、月期间及时分期间组件在不同的应用场景中发挥着重要的作用。这些组件通常用于表单、应用程序或网站中&#xff0c;以方便用户输入和选择特定的日期和时间范围。以下是这些组件的主要作用&a…

C++:日期类的实现

目录 一、前言 二、头文件 三、各个函数的实现 打印、检查日期及获取日期 、、-、-、 、<、<、>、>、 &#xff01; 日期-日期 >>、<< 一、前言 前面几篇讲了关于类和对象的一些知识&#xff0c;本篇就来实现一下前面用到的日期类。 二、头文…

TryHackMe 第3天 | Pre Security (中)

该学习路径讲解了网络安全入门的必备技术知识&#xff0c;比如计算机网络、网络协议、Linux命令、Windows设置等内容。上一篇中简短介绍了计算机网络相关的知识&#xff0c;本篇博客将记录 网络协议 部分。 How the web works? DNS in detail DNS (Domain name system&…

Java面试篇-AOP专题(什么是AOP、AOP的几个核心概念、AOP的常用场景、使用AOP记录操作日志、Spring中的事务是如何实现的)

文章目录 1. 什么是AOP2. AOP的几个核心概念3. AOP的常用场景4. 使用AOP记录操作日志4.1 准备工作4.1.1 引入Maven依赖4.1.2 UserController.java4.1.3 User.java4.1.4 UserService.java 4.2 具体实现&#xff08;以根据id查询用户信息为例&#xff09;4.2.1 定义切面类&#x…

SkyWalking 环境搭建部署

架构简介 skywalking agent : 和业务系统绑定在一起,负责收集各种监控数据skywalking oapservice : 是负责处理监控数据的,比如接受skywalking agent的监控数据,并存储在数据库中;接受skywalking webapp的前端请求,从数据库查询数据,并返回数据给前端。Skywalking oapserv…

华为HarmonyOS地图服务 7- 在地图上绘制标记

场景介绍 本章节将向您介绍如何在地图的指定位置添加标记以标识位置、商家、建筑等。 点标记用来在地图上标记任何位置,例如用户位置、车辆位置、店铺位置等一切带有位置属性的事物。Map Kit提供的点标记功能(又称 Marker)封装了大量的触发事件,例如点击事件、长按事件、…