当前位置: 首页 > news >正文

柠檬笔试——野猪骑士

题目:

野猪骑士最近在一条路上锻炼,整条路可以被分作n块地块,每个地块有自己的高度hi,i∈{1,2,3,...,n}。野猪骑士在地块i时,会跳向下标比i大且高度比hi严格大的地块的集合中高度最小的地块。野猪骑士希望知道自己在每个地块上的下一跳的目的地的高度,如果下一跳不存在的话,则记为-1。

其目的是求比当前下标大的值中的最小值。

set方法

直接用STL库里的 set,其不仅去重而且排序,逆序遍历数据(保证 set 中的值对应下标都大于当前下标),用 unpper_bound 找到容器中第一个严格大于当前值的值即可。

#include <iostream>
#include <vector>
#include <set>using namespace std;int main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int n = 8;vector<int> height = { 11, 13, 10, 5, 10, 12, 21, 11 };vector<int> ans(n, 0);set<int> mySet;for (int i = n - 1; i >= 0; --i) {if (mySet.empty()) {ans[i] = -1;}else {auto it = mySet.upper_bound(height[i]);if (it != mySet.end()) {ans[i] = *it;}else {ans[i] = -1;}}mySet.insert(height[i]);}for (int x : ans) {cout << x << " ";}return 0;
}

测试结果:

12 21 11 10 11 21 -1 -1
②单调栈方法

本题是可以使用单调栈的。由于单调栈是找最近的第一个大的数,所以直接使用会导致出错。但是当把下标和高度绑定后,升序排序高度,此时逆序对整个数组使用单调栈,就保证高度大于当前高度,这样得到的第一个大的数(下标)即为答案。不过注意,当高度相同时,需要将下标降序处理,优先处理下标较小的跳跃高度,否则下标大时可能会时栈处理为空,再处理小下标时则没有数据可用。如果思路模糊可以使用代码模拟一遍。

#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>using namespace std;bool compare(vector<int>& a, vector<int>& b) {if (a[0] == b[0]) {return a[1] > b[1];}else {return a[0] < b[0];}
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int n = 8;vector<int> height = { 11, 13, 10, 5, 10, 12, 21, 11 };vector<int> ans(n, 0);vector<vector<int>> u(n, vector<int>(2, 0));for (int i = 0; i < n; i++) {u[i][1] = i;u[i][0] = height[i];}sort(u.begin(), u.end(), compare);stack<int> stk;for (int i = n - 1; i >= 0; --i) {if (stk.empty()) {ans[u[i][1]] = -1;}else {while (!stk.empty() &&  u[i][1] > stk.top()) {stk.pop();}if (stk.empty()) {ans[u[i][1]] = -1;}else {ans[u[i][1]] = height[stk.top()];}}stk.push(u[i][1]);}for (int x : ans) {cout << x << " ";}return 0;
}

测试结果:

12 21 11 10 11 21 -1 -1

注:由于没找到相关测试平台,如有用例错误还望指出和见谅。

http://www.lryc.cn/news/613930.html

相关文章:

  • apache cgi测试
  • Docker容器部署前端Vue服务
  • Spring Boot + Angular 实现安全登录注册系统:全栈开发指南
  • 【AI】从零开始的文本分类模型实战:从数据到部署的全流程指南
  • BBH详解:面向大模型的高阶推理评估基准与数据集分析
  • C++信息学奥赛一本通-第一部分-基础一-第3章-第1节
  • 支持向量机(SVM)全解析:原理、类别与实践
  • MySQL数据库操作练习
  • Go通道操作全解析:从基础到高并发模式
  • 微算法科技(NASDAQ:MLGO)使用循环QSC和QKD的量子区块链架构,提高交易安全性和透明度
  • 机器学习——KMeans聚类算法(算法原理+超参数详解+实战案例)
  • 计算机视觉CS231n学习(5)
  • 手搓MCP全流程指南:从本地开发部署到PyPI公开发布
  • 构建健壮的数据库连接池:高并发 Web 应用的制胜之匙
  • 面向真实场景的定制化图像降质模型设计方案
  • 深度剖析主流AI大模型的编程语言与架构选择:行业实践与技术细节解读
  • Linux系统编程Day9 -- gdb (linux)和lldb(macOS)调试工具
  • 什么是2米分辨率卫星影像数据?
  • Baumer相机如何通过YoloV8深度学习模型实现高速公路车辆的实时检测计数(C#代码UI界面版)
  • 无服务器日志分析由 Elasticsearch 提供支持,推出新的低价层
  • 14. isaacsim4.2教程-April Tags/给相机加噪声
  • 解析工业机器视觉中的飞拍技术
  • MySQL binlog日志文件转为可正常查看的文本文件
  • 双目标定中旋转矩阵参数应用及旋转角度计算(聚焦坐标系平行)
  • 系统网络端口安全扫描脚本及详解
  • Fabarta个人专属智能体:三维搜索链+动态大纲重构教材开发范式
  • 南方略咨询与与清源科技正式启动国际市场GTM流程规划咨询项目!!!
  • 论文阅读:User Behavior Simulation with Large Language Model-based Agents
  • Langchain入门:构建一个基于SQL数据的问答系统
  • 云平台运维工具 ——Azure 原生工具