给我一个华为的机考题目,并回答它
时间: 2024-05-30 22:16:32 浏览: 135
华为机考题目:有一个长度为n的数组,如何快速找到数组中出现次数超过一半的数字?
回答:可以使用摩尔投票法来解决这个问题。具体地,遍历数组,使用一个计数器和一个候选数字来记录当前出现次数超过一半的数字。如果遇到与候选数字相同的元素,则计数器加1,否则计数器减1。当计数器为0时,更换候选数字为当前元素。最后的候选数字就是出现次数超过一半的数字。时间复杂度为O(n),空间复杂度为O(1)。例如,对于数组[1, 2, 3, 2, 2],使用摩尔投票法可以得到候选数字2,因为2出现3次,超过了数组长度的一半。
相关问题
度的一半。 点击复制后,将打开C知道体验页 | 给我一个华为的机考题目,并回答它
华为机考题目:请用Python语言实现一个函数,输入一个整数n,输出n的阶乘。
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
print(factorial(5)) # 输出120
解析:这是一道经典的递归问题,当n等于0时,返回1,否则返回n乘以n-1的阶乘。在调用函数时,传入5作为参数,即可输出5的阶乘120。
华为python机考题目
题目:统计一个字符串中每个字符出现的次数,并按照出现次数进行降序排列。
解题思路:
1. 首先,定义一个空字典来存储每个字符出现的次数。
2. 循环遍历给定的字符串,将每个字符作为字典的键,出现的次数作为字典的值。
3. 如果字典中已经存在该字符,则将次数加1;否则,在字典中新增该字符,并将次数设置为1。
4. 将字典按照值进行降序排序,得到一个以元组为元素的列表。
5. 打印每个字符和对应的出现次数。
解题代码示例:
```
def count_characters(string):
char_count = {}
for char in string:
if char in char_count:
char_count[char] += 1
else:
char_count[char] = 1
sorted_counts = sorted(char_count.items(), key=lambda x: x[1], reverse=True)
for char, count in sorted_counts:
print(char, count)
# 测试代码
count_characters("hello world")
```
以上代码会打印出每个字符和对应的出现次数,结果如下:
```
l 3
o 2
d 1
e 1
h 1
r 1
w 1
```
这段代码可以统计任意字符串中每个字符的出现次数,并按照出现次数进行降序排列。
阅读全文