华为OD机试3个排序题
1.
- 输入: 第一行输入数组个数,第二行输入数组,第三行输入N
- 输出:数组中最大的N个数和最小的N个数的和,这最值的几个数中,有重复的输出-1
通过率75%,哪有问题,目前还不知道,可以参考下
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;public class Main{public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNextLine()){int count = scanner.nextInt();int[] arr = new int[count];for(int i=0;i<count;i++){arr[i] = scanner.nextInt();}int num = scanner.nextInt();if(num<=0){System.out.println("-1");}else{Arrays.sort(arr);List<Integer> result = new ArrayList<>();//minfor (int i = 0; i < num; i++) {result.add(arr[i]);}//maxfor (int i = arr.length-1; i >= arr.length-num; i--) {result.add(arr[i]);}List<Integer> collect = result.stream().distinct().collect(Collectors.toList());if(collect.size()<num*2){System.out.println("-1");}else{int a =0;for (Integer integer : collect) {a+=integer;}System.out.println(a);}}}}
}
2.
- 输入:一组用英文半角逗号隔开的数字字符串
- 输出:由3个数字组合成最小的数字(不足3个元素则输出所有的)
当时是穷举了,通过率65%,现在是用递归做,进行优化过的
public static void main(String[] args) throws IOException {Scanner scan = new Scanner(System.in);String[] split = scan.next().split(",");List<String> list = Arrays.stream(split).collect(Collectors.toList());List<String> result = new ArrayList<>();DFS(result, list, "");result.sort(String::compareTo);System.out.println(result.get(0));}public static void DFS(List<String> result, List<String> candidate, String prefix) {if (prefix.length() != 0 && candidate.size() == 0) {result.add(prefix);}for (int i = 0; i < candidate.size(); i++) {List<String> temp = new LinkedList<>(candidate);int item = Integer.valueOf(temp.remove(i)); // 取出被删除的元素,这个元素当作一个组合用掉了DFS(result, temp, prefix + item);}}
3.
和第二题有点像
- 输入:一组数 如: 10 9 21
- 输出:3个元素组成的最大的数字(输出字符串)
当时通过率50%多,现在是同样递归优化过的
public static void main(String[] args) throws IOException {BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));String input = reader.readLine();String[] split = input.split(" ");List<String> list = Arrays.asList(split);List<String> result = new ArrayList<>();DFS(result, list, "");result.sort(String::compareTo);System.out.println(result.get(result.size()-1));}public static void DFS(List<String> result, List<String> candidate, String prefix) {if (prefix.length() != 0 && candidate.size() == 0) {result.add(prefix);}for (int i = 0; i < candidate.size(); i++) {List<String> temp = new LinkedList<>(candidate);int item = Integer.valueOf(temp.remove(i)); // 取出被删除的元素,这个元素当作一个组合用掉了DFS(result, temp, prefix + item);}}
上面2 3 题 思路就是,递归求出所有的排列,排序后拿出最小值
补充
对于上面2 3题,新的解法
public static String minDictOrderOfStringJoint(String[] arr){if(arr == null || arr.length == 0)return "";Arrays.sort(arr, (o1, o2) -> o1.concat(o2).compareTo(o2.concat(o1)));StringBuffer sb = new StringBuffer();for(int i = 0; i < arr.length;i ++){sb.append(arr[i]);}return sb.toString();}
利用Comparator接口进行排序,排序规则是,两两比较,较大或较小的排前面即可
或者可以使用位数的比较,取大值时,1位数的最大值放第一位,以此类推.最小值时最大位数的最小值做第一位
华为OD机试3个排序题相关推荐
- 华为OD机试2023年最新题库(JAVA、Python、C++)
我是一名软件开发培训机构老师,我的学生已经有上百人通过了华为OD机试,学生们每次考完试,会把题目拿出来一起交流分享. 2023年5月份题库已经更新为OD统一考试(B卷),题库由三部分组成: 1.202 ...
- 华为OD机试(2023.5新题) 分苹果(java,py,c++,js)
华为OD机试真题目录:真题目录 本文章提供java.python.c++.jsNode四种代码 题目描述 A.B两个人把苹果分为两堆,A希望按照他的计算规则等分苹果,他的计算规则是按照二进制加法计算, ...
- 华为OD机试 - 磁盘容量排序
题目描述 磁盘的容量单位常用的有M,G,T这三个等级,它们之间的换算关系为1T = 1024G,1G = 1024M,现在给定n块磁盘的容量, 请对它们按从小到大的顺序进行稳定排序,例如给定5块盘的容 ...
- 华为OD机试真题大全完整目录
华为OD机试真题大全完整目录 专栏说明如下 专栏目录 专栏说明如下 内容:华为OD机试真题大全 数量:406篇博文(2023年5月16日截止) 更新时间至:2023年5月16日(后续加上去的博文,会每 ...
- 2023华为OD机试备考攻略 以及题库目录分值说明 考点说明
刷题库,刷题库 刷题库.重要的事情说三遍!!!!!!!!!!!!!!!!!!!!!! 要刷有多种语言的实现的题库,一种语言看不懂可以换另一种语言,而且可以结合起来去重!!! 类似下面这种的题库: 华为 ...
- 华为OD机试(21-40)老题库解析Java源码系列连载ing
华为OD机试算法题新老题库练习及源码 老题库 21.字符串序列判定 22.最长的指定瑕疵度的元音子串 23.处理器问题 24.单向链表中间节点 25.字符串重新排列.字符串重新排序 26.完美走位 2 ...
- 华为OD机试真题2023(JavaScript)
华为机试题库已由2022版换为2023版 华为机试有三道题目,第一道和第二道属于简单或中等题,分值为100分,第三道为中等或困难题,分值为200分.总分为400分,150分钟考试时间.之前通过为1 ...
- 华为OD机试真题2022(JAVA)
华为机试题库已换 →→→ 华为OD机试2023B卷(JAVA&JS) 以下题目为旧版题库,供大家课外消遣 基础题: 序号 题目 分值 1 查找众数及中位数 100 2 出错的或电路 100 3 ...
- 【华为OD机试】-2023(A+B卷)真题【C++,JAVA,Python】
考点分类:华为OD机试真题(2023)-考点分类 近期考题:华为OD机试 真题2023 Q1 (A卷) c++/python/java专栏:华为OD机试(Python,Java,C++)2023(A+ ...
最新文章
- 关于python文件读写小结
- android webview gettitle,Android-webview加载网页去除标题
- Manjaro开机黑屏卡住_显卡驱动问题解决及配置源和搜狗输入法安装。
- java时间日期工具类_java日期处理工具类
- Source Insight 教程
- Tomcat(二):server.xml配置
- python与linux关系_如何处理Linux / Python依赖关系?
- 为什么事务日志自动增长会降低你的性能
- Gerrit 服务搭建和升级详解(包括 H2 数据库迁移 MySQL 步骤)
- LeetCode93 Restore IP Addresses
- 项目3:PHP抽奖程序 ,抽奖规则代码 分时间段
- Python抓取必应搜索背景图片
- 打印九行菱形php,c语言打印菱形
- JAVA 将byte数组类型的图片转换成换成JPEG格式
- Maven报:Unable to import maven project: See logs for details
- 静态网页,动态网页,伪静态网页区别以及优缺点
- PS图层模式详细讲解
- 直播评论可以用html,网页制作HTML5实现直播间评论滚动效果的代码
- win7电脑设置自动关机
- 记录自己学习尚硅谷javaweb2022版中遇到的一些问题
热门文章
- AnHelper.js
- WPF 键盘全局接收消息
- sun java applet_Java Applet 基础
- Vue购物车实例练习
- 网络安全实验室——基础关
- php302错误,laravel 302错误,但用员工ID登录
- 【Android】LBS定位功能
- 考研北京理工计算机科学与技术,北京理工大学计算机科学与技术考研
- 驻云科技带着新产品和技术亮相广州云栖大会
- CAVE: A Visual Analytics System for Exploratory Columnar Data Augmentation Using Knowledge Graphs