当前位置: 首页 > 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.xdnf.cn/news/1264699.html

相关文章:

  • Python的七大框架对比分析
  • 若依前后端分离版学习笔记(七)—— Mybatis,分页,数据源的配置及使用
  • Day01 项目概述,环境搭建
  • 【代码随想录day 14】 力扣 104.二叉树的最大深度
  • 【Nginx基础①】 | VS Code Remote SSH 环境下的静态资源与反向代理配置实践
  • 防御保护09
  • 【Unity3D实例-功能-跳跃】角色跳跃
  • 文件结构树的├、└、─ 符号
  • 机器学习及其KNN算法
  • 力扣 hot100 Day69
  • ISL9V3040D3ST-F085C一款安森美 ON生产的汽车点火IGBT模块,绝缘栅双极型晶体管ISL9V3040D3ST汽车点火电路中的线圈驱动器
  • P1044 [NOIP 2003 普及组] 栈
  • 项目一系列-第4章 在线接口文档 代码模板改造
  • day070-Jenkins自动化与部署java、前端代码
  • 深入解析K-means聚类:从原理到调优实战
  • 第七章:数据持久化 —— `chrome.storage` 的记忆魔法
  • Netty-Rest搭建笔记
  • 【感知机】感知机(perceptron)学习算法例题及详解
  • 在 Elasticsearch/Kibana (ELK Stack) 中搜索包含竖线 (|)​​ 这类特殊字符的日志消息 (msg 字段) ​确实需要转义
  • 基于LLM的Chat应用测试方法探索:系统化评估与持续优化
  • java分布式定时任务
  • B4263 [GESP202503 四级] 荒地开垦 题解
  • 操作系统:多线程模型(Multithreading Models)与超线程技术(Hyperthreading)
  • 飞算JavaAI深度解析:专为Java生态而生的智能引擎
  • YOLO-Count:用于文本到图像生成的可微分目标计数
  • C++中的继承:从基础到复杂
  • 【数据结构】排序(sort) -- 计数排序
  • Sum of Four Values(sorting and searching)
  • 文件管理从基础到高级:文件描述符、超大文件切片重组与快速删除实战
  • SVM实战:从线性可分到高维映射再到实战演练