📅  最后修改于: 2023-12-03 15:10:45.687000             🧑  作者: Mango
有时候我们需要在一组数字中查找出现次数最多的数字,但我们不能使用数组或字符串来实现。本篇介绍几种方法来实现这个功能。
我们可以使用二进制数中的每一位来代表一个数字出现的次数,比如说第0位代表数字0出现的次数,第1位代表数字1出现的次数,以此类推。我们遍历整个数字序列,对于每一个数字,我们将对应位的数加一。最后我们只需要找到最高位为1的数,它的位置就是出现次数最多的数字。
def find_most_frequent_number(numbers: List[int]) -> int:
max_frequency = 0
max_frequency_num = -1
for i in range(32):
frequency = 0
for num in numbers:
if (num >> i) & 1:
frequency += 1
if frequency > max_frequency:
max_frequency = frequency
max_frequency_num = i
return max_frequency_num
我们可以使用哈希表来记录每个数字出现的次数。遍历整个数字序列,对于每一个数字,我们检查它是否已经在哈希表中。如果不在,我们就将它加入哈希表,并将出现次数设为1;如果在,我们将对应的出现次数加1。最后我们只需要在哈希表中查找出现次数最大的数字即可。
def find_most_frequent_number(numbers: List[int]) -> int:
freq = {}
max_freq = 0
max_freq_num = -1
for num in numbers:
if num not in freq:
freq[num] = 1
else:
freq[num] += 1
if freq[num] > max_freq:
max_freq = freq[num]
max_freq_num = num
return max_freq_num
我们可以使用链表来记录每个数字出现的次数。遍历整个数字序列,对于每一个数字,我们检查它是否已经在链表中。如果不在,我们就将它加入链表,并将出现次数设为1;如果在,我们将对应的出现次数加1。最后我们只需要在链表中查找出现次数最大的数字即可。
class Node:
def __init__(self, num: int):
self.num = num
self.freq = 1
self.next = None
def find_most_frequent_number(numbers: List[int]) -> int:
head = None
max_freq = 0
max_freq_num = -1
for num in numbers:
found = False
n = head
while n:
if n.num == num:
n.freq += 1
if n.freq > max_freq:
max_freq = n.freq
max_freq_num = n.num
found = True
break
n = n.next
if not found:
new_node = Node(num)
if not head:
head = new_node
else:
new_node.next = head
head = new_node
return max_freq_num
以上是几种不使用数组或字符串来查找最频繁数字的方法。