面试题-华为-数组去重与排序-2

这篇博客介绍了华为面试中的一道编程题,要求在C++中实现数组的去重和排序。作者分享了通过先排序后去重的简单方法,并提供了实验代码。此外,还提到了Python的set集可以用于直接去重,但作者对Python不熟悉,鼓励读者自行尝试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面试题-华为-数组去重与排序-2

华为的面试题比想象中简单,可能是没有遇到更复杂的题目,没有涉及数据结构与算法(o(╯□╰)o)。数组的去重可以使用python的set集实现,但是由于本人python不熟,最后还是选择使用C++实现。

该面试编程题来自于牛客网,本人分享在此仅供大家学习与交流用,不担负任何法律责任。博客版权归博主所有,转载需注明出处。

问题描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

Input Param
n 输入随机数的个数
inputArray n个随机整数组成的数组
Return Value
OutputArray 输出处理后的随机整数

注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。

输入描述:

输入多行,先输入随机整数的个数,再输入相应个数的整数

输出描述:

返回多行,处理后的结果

输入例子:

11
10
20
40
32
67
40
20
89
300
400
15

输出例子:

10
15
20
32

### 关于华为OD中的数组排序 在解决涉及数组排序的问题时,通常会综合运用多种数据结构技术来提高效率。对于数组而言,哈希表是一种非常高效的数据结构,它能够快速判断某个元素是否已经存在于集合中[^1]。 #### 使用哈希表实现数组 为了数组中的复项,可以通过遍历整个数组并将每个遇到的新元素存入哈希表的方式来进行操作。如果当前访问到的元素已经在哈希表里存在,则跳过该元素;反之则将其加入结果列表并记录至哈希表中作为已见过的项目之一。 ```java import java.util.*; public class ArrayDeduplicate { public List<Integer> deduplicate(int[] nums) { Set<Integer> seen = new HashSet<>(); List<Integer> result = new ArrayList<>(); for (int num : nums) { if (!seen.contains(num)) { result.add(num); seen.add(num); // 记录新发现的独特数值 } } return result; } } ``` #### 对数组进行排序 当涉及到对数组排序的需求时,可以选择内置的标准库函数或者自己编写高效的排序算法如快速排序等。标准库提供的`Arrays.sort()`方法适用于大多数场景下的需求,并且具有良好的性能表现。 ```java import java.util.Arrays; public class SortArrayExample { public void sortAndPrint(int[] array){ Arrays.sort(array); System.out.println(Arrays.toString(array)); } } ``` 上述代码展示了如何利用Java自带的功能完成简单的升序排列任务。当然,在实际面试过程中可能会被要求手动实现特定类型的排序逻辑以考察候选人的基础知识掌握情况。 #### 结合案例说明 考虑到具体应用场景可能更加复杂,比如需要先做某些预处理工作再执行排序或是在排序之后还要进一步筛选符合条件的结果集等情况。下面给出一个稍微复杂的例子:给定一组整数,首先要除其中所有的负数,接着按照绝对值大小从小到大排序最后输出不含有任何复正整数的序列[^3]。 ```java import java.util.*; class SpecialSort { private static final Comparator<Integer> ABS_COMPARATOR = Integer::compareUnsigned; public static List<Integer> specialProcess(List<Integer> numbers) { Map<Integer, Boolean> map = new LinkedHashMap<>(); for(Integer number : numbers.stream().filter(x -> x >= 0).toList()){ map.putIfAbsent(number, true); } List<Integer> list = new ArrayList<>(map.keySet()); list.sort(ABS_COMPARATOR); return list; } public static void main(String[] args) { List<Integer> inputList = Arrays.asList(-7,-5,2,8,9,2,4,6,8,9); System.out.println(specialProcess(inputList)); } } ``` 此程序片段实现了从原始输入集中移除非正值成员、消除冗余条目以及依据绝对值得顺序整理最终输出这三个主要功能点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值