2026华为OD面试题022:分辨率排序

发布时间:2026/7/14 5:56:55

2026华为OD面试题022:分辨率排序
题目描述视频清晰度有 4 个档位每个档位对应一个最小的宽×高门槛4K3840 × 21602K2560 × 14401080P1920 × 1080720P1280 × 720档位大小关系720P 1080P 2K 4K。给定任意一个分辨率宽×高匹配档位的规则是宽和高要同时大于等于某个档位的最小宽高才算满足该档位并且优先往高里匹配。举个例子2600x14004K 门槛 3840×21602600 3840不满足2K 门槛 2560×14402600 2560但 1400 1440不满足1080P 门槛 1920×10802600 1920 且 1400 1080满足所以2600x1400算 1080P。还有三条特殊规则所有低于 720P 的分辨率统统算 720P。最大档位就是 4K只要满足 4K 标准再大也算 4K。不考虑交换宽高。比如2500x3200宽不够 2K 但高够也只能往下匹配成 1080P不能算 2K。分辨率大小比较规则先比档位档位高的排前面。档位相同比面积宽×高面积大的排前面。面积还相同比宽宽大的排前面。输入n 组 “宽x高” 字符串空格间隔n 10。输出从大到小排序后输出。原题文件在输入输出示例处截断这里按常见题型补全输出按空格间隔排在一行。讲个故事产品经理的清晰度需求小李在视频平台做后端。有天产品经理丢过来一串分辨率2600x1400 1920x1080 3840x2160 1280x720说按清晰度从高到低排一下前端要展示给用户选。小李心想这不就是排序嘛按面积排不就完了结果产品经理补了一句“2600x1400这种算 1080P不算 2K规则我都写在文档里了。”小李打开文档一看档位匹配不是看面积大小是看宽高是否同时达标而且要从高往低试。这下有点意思了。核心原理定档 三连排序这题拆成两步就清楚了。第一步给每个分辨率定档。定档的本质是从最高的 4K 开始往下试宽和高同时达标才算数第一个匹配上的就是它的档位。4K宽 3840 且 高 21602K宽 2560 且 高 14401080P宽 1920 且 高 1080都不满足算 720P低于 720P 的也兜底成 720P注意是同时光宽够高不够不行。所以2600x1400卡在 2K 的 1440 这道坎上掉到 1080P。第二步按三连规则排序。档位高的在前4K 2K 1080P 720P档位相同面积宽×高大的在前面积也相同宽大的在前拿样例验证一下3840x21604K2600x14001080P面积 3,640,0001920x10801080P面积 2,073,6001280x720720P排序结果3840x2160 2600x1400 1920x1080 1280x720。两个 1080P 之间比面积2600x1400面积更大排前面。怎么实现读入所有 token按空格切成一个个 “WxH” 字符串对每个字符串按 x 拆出宽和高写个 getLevel 函数从 4K 往下判断档位算面积 宽 × 高用 long long 防溢出按档位降序、面积降序、宽降序排序输出排序后的原始字符串代码实现C 语言#includestdio.h#includestdlib.h#includestring.htypedefstruct{charraw[32];intw,h;intlevel;// 4K4, 2K3, 1080P2, 720P1longlongarea;}Res;intgetLevel(intw,inth){if(w3840h2160)return4;if(w2560h1440)return3;if(w1920h1080)return2;return1;}intcmp(constvoid*a,constvoid*b){constRes*xa,*yb;if(x-level!y-level)returny-level-x-level;// 档位降序if(x-area!y-area)returnx-areay-area?1:-1;// 面积降序returnx-wy-w?1:-1;// 宽降序}intmain(){charbuf[4096];size_tlenfread(buf,1,sizeof(buf)-1,stdin);buf[len]\0;Res arr[16];intn0;char*tokstrtok(buf, \t\r\n);while(tok){strcpy(arr[n].raw,tok);chart[32];strcpy(t,tok);for(char*pt;*p;p)if(*pX)*px;intw0,h0;sscanf(t,%dx%d,w,h);arr[n].ww;arr[n].hh;arr[n].levelgetLevel(w,h);arr[n].area(longlong)w*h;n;tokstrtok(NULL, \t\r\n);}qsort(arr,n,sizeof(Res),cmp);for(inti0;in;i)printf(%s%c,arr[i].raw,i1n? :\n);return0;}C#includebits/stdc.husingnamespacestd;intgetLevel(intw,inth){if(w3840h2160)return4;if(w2560h1440)return3;if(w1920h1080)return2;return1;}structRes{string raw;intw,level;longlongarea;};intmain(){vectorResv;string tok;while(cintok){string ttok;for(charc:t)if(cX)cx;intpt.find(x);intwstoi(t.substr(0,p));inthstoi(t.substr(p1));v.push_back({tok,w,getLevel(w,h),(longlong)w*h});}sort(v.begin(),v.end(),[](constResa,constResb){if(a.level!b.level)returna.levelb.level;if(a.area!b.area)returna.areab.area;returna.wb.w;});for(inti0;i(int)v.size();i)coutv[i].raw \n[i1(int)v.size()];return0;}Javaimportjava.util.*;publicclassMain{staticintgetLevel(intw,inth){if(w3840h2160)return4;if(w2560h1440)return3;if(w1920h1080)return2;return1;}staticclassRes{Stringraw;intw,level;longarea;Res(Strings){raws;String[]sps.split([xX]);wInteger.parseInt(sp[0]);inthInteger.parseInt(sp[1]);levelgetLevel(w,h);area(long)w*h;}}publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);ListReslistnewArrayList();while(sc.hasNext()){list.add(newRes(sc.next()));}list.sort((a,b)-{if(a.level!b.level)returnb.level-a.level;if(a.area!b.area)returnLong.compare(b.area,a.area);returnInteger.compare(b.w,a.w);});StringBuildersbnewStringBuilder();for(inti0;ilist.size();i){if(i0)sb.append( );sb.append(list.get(i).raw);}System.out.println(sb);}}JavaScriptfunctiongetLevel(w,h){if(w3840h2160)return4;if(w2560h1440)return3;if(w1920h1080)return2;return1;}functionsolve(tokens){constlisttokens.map(s{const[w,h]s.split(/[xX]/).map(Number);return{raw:s,w,level:getLevel(w,h),area:w*h};});list.sort((a,b){if(a.level!b.level)returnb.level-a.level;if(a.area!b.area)returnb.area-a.area;returnb.w-a.w;});returnlist.map(rr.raw).join( );}constfsrequire(fs);constinputfs.readFileSync(0,utf8);consttokensinput.trim().split(/\s/).filter(Boolean);console.log(solve(tokens));Pythonimportsysdefget_level(w,h):ifw3840andh2160:return4ifw2560andh1440:return3ifw1920andh1080:return2return1defmain():tokenssys.stdin.read().split()parsed[]forsintokens:w,hmap(int,s.lower().split(x))parsed.append((get_level(w,h),w*h,w,s))# 档位降序、面积降序、宽降序parsed.sort(keylambdax:(-x[0],-x[1],-x[2]))print( .join(p[3]forpinparsed))main()复杂度分析解析 n 个分辨率O(n)排序O(n * log n)总时间复杂度O(n * log n)题目里 n 10基本是常数级空间复杂度O(n)总结一下这题看着是排序真正的考点在档位匹配规则。套路就两步定档从 4K 往下试宽高同时达标才算数两个兜底低于 720P 算 720P高于 4K 算 4K不交换宽高排序三连档位、面积、宽全部降序容易踩的坑是把宽高同时达标看成宽或高达标或者拿面积直接定档。2600x1400就是专门用来骗这个的面积比 1080P 大但卡在 2K 的 1440 高度上只能算 1080P。你做这种带规则的排序题是先把规则理清再写代码还是先写个朴素排序再说欢迎在评论区聊聊。

相关新闻

经典CNN网络演进:从LeNet到ResNet的核心突破与实战应用

经典CNN网络演进:从LeNet到ResNet的核心突破与实战应用

2026/7/14 5:56:55

1. 先搞清楚这些经典CNN到底解决了什么问题如果你刚开始接触深度学习,看到LeNet、AlexNet、VGGNet、GoogleNet、ResNet这一串名字可能会觉得头大。其实这些网络不是凭空出现的,每一个都是在解决前一个网络遇到的实际问题。LeNet最早用于手写数字识别&…

2026华为OD面试题021:最大化游戏试玩资格分发

2026华为OD面试题021:最大化游戏试玩资格分发

2026/7/14 5:56:55

题目描述 新研发了一台游戏设备,面向用户开放试玩。现在收到 n 个试玩申请,每个申请有开始时间和结束时间。 你是协调员,要从这些申请里挑出一批,满足: 任意两场被选中的试玩时间不重叠。允许连续衔接,比…

临沂太阳能控制器选型工艺与工程落地标准解析

临沂太阳能控制器选型工艺与工程落地标准解析

2026/7/14 5:46:55

一、太阳能控制器在临沂市场的工程应用背景临沂作为北方物流枢纽城市,其太阳能光伏产业近年来发展迅速。本地太阳能控制器应用主要集中在农村分布式光伏、农业灌溉系统、交通信号灯、市政照明等场景。由于该地区四季分明、光照资源充足且昼夜温差较大,对…

工业信号采集中的噪声抑制与隔离技术实践

工业信号采集中的噪声抑制与隔离技术实践

2026/7/14 8:17:07

1. 工业信号采集的噪声挑战与核心需求在钢铁冶炼、石油化工、电力传输等典型工业现场,信号采集系统面临着多重电磁干扰威胁。我曾参与某焦化厂温度监控系统改造,现场实测发现:当大功率变频器启动时,热电偶信号线上会感应出高达12V…

ROS2 GPG密钥过期故障解析:从NO_PUBKEY错误理解APT安全机制

ROS2 GPG密钥过期故障解析:从NO_PUBKEY错误理解APT安全机制

2026/7/14 8:17:07

1. 项目概述:从一次密钥过期故障说起 如果你正在使用ROS2,尤其是Ubuntu 22.04上的Humble版本,最近执行 sudo apt update 时,大概率会遇到一个令人困惑的报错:“由于没有公钥,无法验证下列签名&#xff1a…

Animavita宠物领养平台:如何快速找到您附近的宠物伙伴

Animavita宠物领养平台:如何快速找到您附近的宠物伙伴

2026/7/14 8:17:07

Animavita宠物领养平台:如何快速找到您附近的宠物伙伴 【免费下载链接】animavita Trigger life-saving alerts, register animals for adoption and find the closest pet friend to adopt :dog: 项目地址: https://gitcode.com/gh_mirrors/an/animavita 想…

Small RTOS51 实战手记(一):从零到一,在STC89C52上构建多任务LED流水灯

Small RTOS51 实战手记(一):从零到一,在STC89C52上构建多任务LED流水灯

2026/7/14 8:17:07

1. 初识Small RTOS51:51单片机的轻量级多任务引擎 第一次听说在STC89C52这样的51单片机上跑操作系统时,我的反应和多数嵌入式新手一样:"这玩意儿内存才128字节,能跑得动RTOS?" 但当我真正把Small RTOS51跑起…

Kuroba-Experimental终极指南:如何快速掌握Android图像板浏览器

Kuroba-Experimental终极指南:如何快速掌握Android图像板浏览器

2026/7/14 8:17:07

Kuroba-Experimental终极指南:如何快速掌握Android图像板浏览器 【免费下载链接】Kuroba-Experimental Free and open source image board browser 项目地址: https://gitcode.com/gh_mirrors/ku/Kuroba-Experimental Kuroba-Experimental是一款功能强大的免…

告别嵌套地狱:wr/write-pythonic-code-demos教你写出扁平优雅的Python代码

告别嵌套地狱:wr/write-pythonic-code-demos教你写出扁平优雅的Python代码

2026/7/14 8:07:07

告别嵌套地狱:wr/write-pythonic-code-demos教你写出扁平优雅的Python代码 【免费下载链接】write-pythonic-code-demos Write Pythonic Code Like a Seasoned Developer video course demo materials. 项目地址: https://gitcode.com/gh_mirrors/wr/write-python…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/13 7:41:16

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/13 20:43:19

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/13 20:43:10

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

XUnity.AutoTranslator 游戏实时翻译插件:从原理到实战的完整指南

XUnity.AutoTranslator 游戏实时翻译插件:从原理到实战的完整指南

2026/7/14 0:06:37

1. 项目概述:当游戏语言成为一堵墙作为一名玩了十几年日系、欧美独立游戏的“老油条”,我太懂那种面对一款心仪已久、画风玩法都戳中G点的游戏,却因为语言不通而望而却步的痛了。尤其是那些基于Unity引擎开发的、体量不大但内容精良的作品&am…

2026普通文员学数据分析的价值

2026普通文员学数据分析的价值

2026/7/14 0:06:37

一、2026年普通文员学习数据分析的必要性随着数字化转型加速,数据分析技能正逐渐成为职场基础能力。普通文员学习数据分析可以提升工作效率、增强竞争力,并为职业转型提供更多可能性。二、数据分析对文员的价值自动化办公:通过数据分析工具&a…

2026从计划员到主管,生产管理者学数据分析有用吗?

2026从计划员到主管,生产管理者学数据分析有用吗?

2026/7/14 0:06:37

一、生产管理领域的职业发展路径 从计划员到主管的角色转变,是生产管理者职业发展的典型路径。计划员主要负责生产排程、库存管理和资源协调等基础工作,而主管则需要承担团队管理、决策支持和效率优化等更高级别的职责。这种转变不仅仅是职位的提升&…