6.24华为OD机试真题 新系统 - 终端设备档位差异统计 (Java/Py/C/C++/Js/Go)

📅2026/7/13 15:46:34 👁️次浏览
6.24华为OD机试真题 新系统 - 终端设备档位差异统计 (Java/Py/C/C++/Js/Go)
终端设备档位差异统计2026 华为OD机试真题 6月24日华为OD上机新系统考试真题 100 分题型点击查看华为 OD 机试真题完整目录2026最新华为OD机试新系统卷 双机位C卷 真题题库目录全覆盖题库 逐点算法考点详解题目描述在进行手机、平板、穿戴等设备的系统调优时会为不同设备采集一组性能与能耗综合档位值为了分析产品矩阵中是否存在稳定的档位梯度工程师需要统计所有 “档位差异恰好为指定值” 的档位组合数量。给定一个整数数组 profiles其中 profiles[i] 表示第 i 台终端设备的综合档位值再给定一个非负整数 diff表示目标档位差。请你返回不同档位值组成的组合数量使得两个档位值的绝对差等于 diff。注意只按档位值去重不按设备下标计数。 例如 profiles[1,1,3,3]diff2 时只能计为一组 (1,3)。当 diff0 时只有某个档位值出现至少两次才可以形成一组。约束条件1≤ profiles.size() ≤100000−2147483648≤ profiles[i] ≤21474836470≤diff≤2147483647输入描述一个整数数组 profiles,其中 profiles[i] 表示第 i 台终端设备的综合档位值-一个非负整数 diff表示目标档位差输出描述不同档位值组成的组合数量示例1输入1,5,3,4,2 2输出3说明满足要求的不同档位组合为 (1,3)、(3,5)、(2,4)共 3 组。示例2输入8,8,8,10,10,12 0输出2说明档位 8 和档位 10 都至少出现两次可以分别形成一组差值为 0 的组合档位 12 只出现一次不能形成组合。示例3输入-5,-3,-1,1 2输出3说明满足要求的组合为 (−5,−3)、(−3,−1)、(−1,1)。解题思路核心思想统计数组中不同档位值之间的差值为diff的组合数量。核心思想是去重处理只按档位值去重不按设备下标计数特殊情况当diff0时只有出现至少两次的档位才能形成组合避免重复遍历集合时只检查v与vdiff避免 (v, vdiff) 和 (vdiff, v) 重复计数算法步骤将数组转为集合去重若diff0统计出现次数 2 的档位数量若diff0遍历集合检查vdiff是否也在集合中统计满足条件的数量返回统计结果复杂度分析时间复杂度O(n)只需遍历数组一次建立集合空间复杂度O(n)最坏情况下集合大小为 nJavaimportjava.util.*;publicclassMain{publicstaticintsolve(int[]arr,intdiff){SetIntegersetnewHashSet();for(intv:arr)set.add(v);if(diff0){MapInteger,IntegercntnewHashMap();for(intv:arr)cnt.put(v,cnt.getOrDefault(v,0)1);intres0;for(intc:cnt.values()){if(c2)res;}returnres;}intres0;for(intv:set){if(set.contains(vdiff))res;}returnres;}publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);String[]firstsc.nextLine().split(,);intdiffInteger.parseInt(sc.nextLine().trim());int[]arrnewint[first.length];for(inti0;ifirst.length;i){arr[i]Integer.parseInt(first[i].trim());}System.out.println(solve(arr,diff));}}PythonfromcollectionsimportCounterimportsysdefsolve(arr,diff):ifdiff0:cntCounter(arr)returnsum(1forcincnt.values()ifc2)sset(arr)returnsum(1forvinsifvdiffins)if__name____main__:linessys.stdin.read().strip().split(\n)arrlist(map(int,lines[0].split(,)))diffint(lines[1].strip())print(solve(arr,diff))JavaScriptconstreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,output:process.stdout});constlines[];rl.on(line,(line){lines.push(line);});rl.on(close,(){constarrlines[0].split(,).map(Number);constdiffNumber(lines[1].trim());console.log(solve(arr,diff));});functionsolve(arr,diff){if(diff0){constcntnewMap();for(constnumofarr){cnt.set(num,(cnt.get(num)||0)1);}letans0;for(constcountofcnt.values()){if(count2)ans;}returnans;}constsetnewSet(arr);letans0;for(constnumofset){if(set.has(numdiff)){ans;}}returnans;}C#includebits/stdc.husingnamespacestd;intsolve(vectorintarr,intdiff){unordered_setints(arr.begin(),arr.end());if(diff0){unordered_mapint,intcnt;for(intv:arr)cnt[v];intres0;for(autop:cnt)if(p.second2)res;returnres;}intres0;for(intv:s){if(s.count(vdiff))res;}returnres;}intmain(){string line1,line2;getline(cin,line1);getline(cin,line2);vectorintarr;string num;for(charc:line1){if(c,){arr.push_back(stoi(num));num;}else{numc;}}if(!num.empty())arr.push_back(stoi(num));intdiffstoi(line2);coutsolve(arr,diff)endl;return0;}Gopackagemainimport(bufiofmtosstrconvstrings)funcsolve(arr[]int,diffint)int{set:make(map[int]bool)for_,v:rangearr{set[v]true}ifdiff0{cnt:make(map[int]int)for_,v:rangearr{cnt[v]}res:0for_,c:rangecnt{ifc2{res}}returnres}res:0forv:rangeset{ifset[vdiff]{res}}returnres}funcmain(){in:bufio.NewReader(os.Stdin)line1,_:in.ReadString(\n)line2,_:in.ReadString(\n)nums:strings.Split(strings.TrimSpace(line1),,)arr:make([]int,0,len(nums))for_,s:rangenums{v,_:strconv.Atoi(strings.TrimSpace(s))arrappend(arr,v)}diff,_:strconv.Atoi(strings.TrimSpace(line2))fmt.Println(solve(arr,diff))}C语言#includestdio.h#includestdlib.h#includestring.htypedefstruct{intkey;intcount;}Pair;intcompare(constvoid*a,constvoid*b){return((Pair*)a)-key-((Pair*)b)-key;}intsolve(int*arr,intn,intdiff){// 去重int*setmalloc(n*sizeof(int));intsetSize0;for(inti0;in;i){intfound0;for(intj0;jsetSize;j){if(set[j]arr[i]){found1;break;}}if(!found)set[setSize]arr[i];}if(diff0){// 统计出现次数2的档位Pair*pairsmalloc(setSize*sizeof(Pair));for(inti0;isetSize;i){pairs[i].keyset[i];pairs[i].count0;}for(inti0;in;i){for(intj0;jsetSize;j){if(pairs[j].keyarr[i]){pairs[j].count;break;}}}intres0;for(inti0;isetSize;i){if(pairs[i].count2)res;}free(pairs);free(set);returnres;}intres0;for(inti0;isetSize;i){for(intj0;jsetSize;j){if(set[j]-set[i]diff){res;}}}free(set);returnres;}intmain(){charline1[100000],line2[100];fgets(line1,sizeof(line1),stdin);fgets(line2,sizeof(line2),stdin);intarr[100000];intn0;char*tokenstrtok(line1,,\n);while(token!NULL){arr[n]atoi(token);tokenstrtok(NULL,,\n);}intdiffatoi(line2);printf(%d\n,solve(arr,n,diff));return0;}完整用例用例11,5,3,4,2 2用例28,8,8,10,10,12 0用例3-5,-3,-1,1 2用例41,1,1,1 0用例51,2,3,4,5 10用例65,5,10,10 5用例71000000000,-1000000000 2000000000用例81 0用例91,1 0用例101,3,5,7,9 2文章目录**终端设备档位差异统计**题目描述注意约束条件输入描述输出描述示例1示例2示例3解题思路核心思想算法步骤复杂度分析JavaPythonJavaScriptCGoC语言完整用例用例1用例2用例3用例4用例5用例6用例7用例8用例9用例10