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

华为OD新系统机试真题 2026.5.10 - 美观的灯笼

美观的灯笼(Py/Java/C/C++/Js/Go)题解

华为OD新系统机试真题 华为OD新系统上机考试真题 5月10号 100分题型

华为OD新系统机试真题目录点击查看: 华为OD新系统机试真题题库目录|机考题库 + 算法考点详解

题目描述

春节将至,工人要在古镇老街挂灯笼。街上有N NN个挂灯点,每个点因建筑结构不同,工人挂上的灯笼的尺寸M也不同(数值越大表示灯笼越大)。
工人认为美观的灯笼必须按非递增尺寸顺序挂置,即后续灯笼尺寸不能超过当前灯笼(只能相同或更小)。
工人完成灯笼挂接后,需要你代替他判断:
1、这排灯笼里,满足美观定义的最长连续灯笼区域有多少个灯笼;
2、这段最长连续区域是从哪个挂灯点开始?(当存在多个最长连续区域时选择最左边的挂灯点)

输入描述

N NN个正整数M ( 1 ≤ M ≤ 100 ) M(1 \le M \le 100)M1M100,表示每个挂灯点所挂的灯笼尺寸。

输出描述

输出两个整数:第一个是符合题意的灯笼数,第二个是开始挂灯笼的挂灯点位置(从0 00开始计数)。

样例1

输入

5,3,4,4,2,1

输出

4,2

说明

灯笼尺寸序列为[ 5 , 3 , 4 , 4 , 2 , 1 ] [5,3,4,4,2,1][5,3,4,4,2,1]。存在长度为4 44的非递增连续子序列:[ 4 , 4 , 2 , 1 ] [4,4,2,1][4,4,2,1](位置2 − 5 2-525)。

样例2

输入

5,4,3,2,1

输出

5,0

说明

灯笼尺寸序列为[ 5 , 4 , 3 , 2 , 1 ] [5,4,3,2,1][5,4,3,2,1]。整个序列满足非递增要求,长度为5 55,起始位置为0 00

样例3

输入

2,2,2,2

输出

4,0

说明

灯笼尺寸序列为[ 2 , 2 , 2 , 2 ] [2,2,2,2][2,2,2,2]。所有灯笼尺寸相等,满足非递增要求,长度为4 44,起始位置为0 00

题解

思路:模拟

  1. 非递增就是后一个尺寸不能大于前一个尺寸,满足nums[i] <= nums[i-1]即可。并且题目要求找连续非递增区域。
  2. 基于1的分析,按照下面逻辑实现
    • 定义bestBeginbestLen记录最好的开始点和最好的长度,定义curLencurBegin记录当前连续区域的长度和开始点。
    • 从前往后扫描数据,当扫描到位置i时:
      • 如果nums[i] > nums[i-1], 非递增终端,更新curLen=i,curBegin=i
      • 如果nums[i] >= nums[i-1],更新curLen += 1
      • 每轮结束之后,判断curLen是否大于bestLen, 满足条件更新bestLen = curLen, bestBegin = curBegin
  3. 按照2的逻辑处理之后,返回对应的bestLenbestBegin即可。

c++

#include<iostream> #include<vector> #include<string> #include <utility> #include <sstream> #include<algorithm> #include<cmath> #include<map> using namespace std; // 通用 切割函数 函数 将字符串str根据delimiter进行切割 vector<int> split(const string& str, const string& delimiter) { vector<int> result; size_t start = 0; size_t end = str.find(delimiter); while (end != string::npos) { result.push_back(stoi(str.substr(start, end - start))); start = end + delimiter.length(); end = str.find(delimiter, start); } // 添加最后一个部分 result.push_back(stoi(str.substr(start))); return result; } vector<int> findLongLanterns(vector<int>& nums) { // 输入为空 if (nums.empty()) { return {0, 0}; } // 最好的开始点和最好的长度 int bestBegin = -1; int bestLen = 0; // 当前开始点和当前长度 int curLen = 1; int curBegin = 0; for (int i = 1; i < nums.size(); i++) { // 重置起点和长度 if (nums[i] > nums[i-1]) { curLen = 1; curBegin = i; } else { curLen++; } // 大于才更新,等于情况下之前的起点肯定小于当前 if (curLen > bestLen) { bestLen = curLen; bestBegin = curBegin; } } return {bestLen, bestBegin}; } int main() { string input; getline(cin, input); vector<int> nums = split(input, ","); vector<int> res = findLongLanterns(nums); // 输出结果 cout << res[0] << "," << res[1]; return 0; }

JAVA

import java.util.*; public class Main { public static int[] findLongLanterns(int[] nums) { // 输入为空 if (nums.length == 0) { return new int[]{0, 0}; } // 最好的开始点和最好的长度 int bestBegin = -1; int bestLen = 0; // 当前开始点和当前长度 int curLen = 1; int curBegin = 0; for (int i = 1; i < nums.length; i++) { // 重置起点和长度 if (nums[i] > nums[i - 1]) { curLen = 1; curBegin = i; } else { curLen++; } // 大于才更新,等于情况下之前的起点肯定小于当前 if (curLen > bestLen) { bestLen = curLen; bestBegin = curBegin; } } return new int[]{bestLen, bestBegin}; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String input = scanner.nextLine(); String[] arr = input.split(","); int[] nums = new int[arr.length]; for (int i = 0; i < arr.length; i++) { nums[i] = Integer.parseInt(arr[i]); } int[] res = findLongLanterns(nums); // 输出结果 System.out.println(res[0] + "," + res[1]); } }

Python

deffind_long_lanterns(nums):# 输入为空ifnotnums:return[0,0]# 最好的开始点和最好的长度best_begin=-1best_len=0# 当前开始点和当前长度cur_len=1cur_begin=0foriinrange(1,len(nums)):# 重置起点和长度ifnums[i]>nums[i-1]:cur_len=1cur_begin=ielse:cur_len+=1# 大于才更新,等于情况下之前的起点肯定小于当前ifcur_len>best_len:best_len=cur_len best_begin=cur_beginreturn[best_len,best_begin]defmain():input_str=input()nums=list(map(int,input_str.split(",")))res=find_long_lanterns(nums)# 输出结果print(f"{res[0]},{res[1]}")main()

JavaScript

functionfindLongLanterns(nums){// 输入为空if(nums.length===0){return[0,0];}// 最好的开始点和最好的长度letbestBegin=-1;letbestLen=0;// 当前开始点和当前长度letcurLen=1;letcurBegin=0;for(leti=1;i<nums.length;i++){// 重置起点和长度if(nums[i]>nums[i-1]){curLen=1;curBegin=i;}else{curLen++;}// 大于才更新,等于情况下之前的起点肯定小于当前if(curLen>bestLen){bestLen=curLen;bestBegin=curBegin;}}return[bestLen,bestBegin];}constreadline=require("readline");constrl=readline.createInterface({input:process.stdin,output:process.stdout});letinput=[];rl.on("line",function(line){input.push(line);});rl.on("close",function(){constnums=input[0].split(",").map(Number);constres=findLongLanterns(nums);// 输出结果console.log(res[0]+","+res[1]);});

Go

packagemainimport("bufio""fmt""os""strconv""strings")funcfindLongLanterns(nums[]int)[]int{// 输入为空iflen(nums)==0{return[]int{0,0}}// 最好的开始点和最好的长度bestBegin:=-1bestLen:=0// 当前开始点和当前长度curLen:=1curBegin:=0fori:=1;i<len(nums);i++{// 重置起点和长度ifnums[i]>nums[i-1]{curLen=1curBegin=i}else{curLen++}// 大于才更新,等于情况下之前的起点肯定小于当前ifcurLen>bestLen{bestLen=curLen bestBegin=curBegin}}return[]int{bestLen,bestBegin}}funcmain(){reader:=bufio.NewReader(os.Stdin)input,_:=reader.ReadString('\n')input=strings.TrimSpace(input)arr:=strings.Split(input,",")nums:=make([]int,len(arr))fori:=0;i<len(arr);i++{nums[i],_=strconv.Atoi(arr[i])}res:=findLongLanterns(nums)// 输出结果fmt.Printf("%d,%d\n",res[0],res[1])}

C语言

#include<stdio.h>#include<stdlib.h>#include<string.h>#defineMAXN100005// 查找结果voidfindLongLanterns(intnums[],intn,int*bestLen,int*bestBegin){// 输入为空if(n==0){*bestLen=0;*bestBegin=0;return;}// 最好的开始点和最好的长度*bestBegin=-1;*bestLen=0;// 当前开始点和当前长度intcurLen=1;intcurBegin=0;for(inti=1;i<n;i++){// 重置起点和长度if(nums[i]>nums[i-1]){curLen=1;curBegin=i;}else{curLen++;}// 大于才更新,等于情况下之前的起点肯定小于当前if(curLen>*bestLen){*bestLen=curLen;*bestBegin=curBegin;}}}intmain(){charinput[MAXN];scanf("%s",input);intnums[MAXN];intn=0;// 使用 strtok 分割字符串char*token=strtok(input,",");while(token!=NULL){nums[n++]=atoi(token);token=strtok(NULL,",");}intbestLen,bestBegin;findLongLanterns(nums,n,&bestLen,&bestBegin);// 输出结果printf("%d,%d\n",bestLen,bestBegin);return0;}
http://www.jsqmd.com/news/794925/

相关文章:

  • 公共卫生与预防医学考研辅导班推荐:专门针对性培训机构评测 - michalwang
  • 购物卡回收平台哪家靠谱,该如何选择? - 购物卡回收找京尔回收
  • 旅游景点导游|基于springboot+vue的桂林旅游景点导游系统(源码+数据库+文档)
  • 船用柴油机缸体孔系在机检测系统设计【附方案】
  • 2026 浙江丽水彩钢瓦金属屋面外墙防水补漏防腐翻新公司 TOP5 权威推荐 + 避坑指南 - 速递信息
  • ncmdump终极指南:快速解锁网易云音乐NCM加密文件的完整解决方案
  • 液压六自由度并联机构运动学设计与模糊神经PID控制【附程序】
  • Docker 容器内 SQLite 数据持久化怎么正确挂载卷
  • AI大模型竞品Anthropic Claude Opus 4.7深度分析
  • Blender 3MF插件:3D打印设计的终极解决方案
  • 军事预防医学考研辅导班推荐:专门针对性培训机构评测 - michalwang
  • 172 号卡邀请码是多少?2026 年 5 月官方唯一有效码 - 资讯焦点
  • 泓动数据官网是哪个?联系方式多少?www.hongdongshuju.com(商务对接认准泓动数据总部唯一官网) - 速递信息
  • 从零构建可验证KG系统:奇点大会现场演示的6大自动化验证工具链与37项合规性指标
  • 服了,程序员就不配谈女朋友?
  • 采煤机截割曲线畸变连续调节补偿技术【附仿真】
  • 5步轻松实现老旧电视秒变智能直播中心:MyTV-Android终极指南
  • Function Calling vs MCP:AI工具生态的架构演进与选型指南2026
  • 高端不锈钢装饰材料的微观晶体结构与表面物理改性技术白皮书 - 资讯焦点
  • 推荐两江新区不错的旧房翻新装修设计,效果巴适质量过硬且负责又有性价比 - 大渝测评
  • 基于WebAssembly的高效SQLite数据库在线解析方案
  • 穿透 MQ 专栏 (三):【幂等防御】“网卡了一下,用户被扣了两次钱?”:如何防住防不胜防的重复消费
  • 总线概述
  • C++ / MFC / Qt / C# 核心知识点汇总笔记
  • 2026年五大听书软件横评,QQ阅读、书尖AI 一篇说清楚 - 资讯焦点
  • 鸣潮终极解放指南:如何用ok-ww后台自动化工具每天节省2小时游戏时间
  • 如何突破《原神》60帧限制:终极帧率解锁完全指南
  • 2026上海GEO优化公司:制造业、服务业、化工行业GEO优化公司推荐 - 资讯焦点
  • 手把手教你搭建专属 AI 助手|hermes agent 2 分钟极速部署指南! - 博客万
  • 从蛋白质分类到社交网络:Graph Pooling在实际项目里到底怎么用?