华为研发工程师编程题解析:数组周期删除与字符集合

版权申诉
0 下载量 19 浏览量 更新于2024-09-09 收藏 389KB PDF 举报
"这份文档是华为2016年研发工程师面试中的编程题目及答案,包含了两道编程题,一道是关于数组元素删除的问题,另一道是处理字符串中字符集合的题目。" 首先,我们详细分析第一道编程题。题目要求在数组a[N]中,每隔两个数删除一个数,直到只剩下一个数。例如,对于数组{0, 1, 2, 3, 4, 5, 6, 7},按照规则,将依次删除2、5和0,最后剩下的数是7,其原始下标为6。这个问题可以通过遍历数组并使用一个布尔数组`delete[]`来标记要删除的元素实现。代码中,`n`表示数组长度,`delete[]`记录每个元素是否被删除,`count`记录已删除的元素数量,`index`存储最后一个被删除的原始下标。通过一个for循环遍历数组,当找到未删除的元素时,更新`num`计数器,当`num`达到3时,标记当前元素为删除,并更新`index`和`count`。 接下来,我们看第二道编程题。这道题要求接收一个字符串,找出其中所有不重复的字符并打印出来。为了解决这个问题,可以使用Java的`HashSet`数据结构,它是一个不允许有重复元素的集合。代码中,创建一个`HashSet<Character>`实例`set`来存储不重复的字符。通过`Scanner`读取输入的字符串,将其转换为`char[]`,然后遍历数组,使用`set.add()`方法检查字符是否已存在。如果`set.add(c[i])`返回`true`,说明这个字符是第一次出现,将其添加到`set`中,并添加到结果字符串`sb`。最后,`sb.toString()`将给出所有不重复字符的字符串。 这两道题目都体现了编程基础中的数组操作、条件判断、循环控制以及数据结构(如布尔数组和哈希集合)的应用。它们在面试中常用来测试候选人的逻辑思维、问题解决能力和对基本数据结构的理解。通过解决这类问题,工程师可以提升自己的算法设计和实现能力。