程序以Python找出等效频率的序列
假设我们有一个数字列表。我们必须找到最长的数字序列的长度,这样当我们从序列中删除一个数字时,每个数字都会出现相同的次数。
因此,如果输入像数字=[2、4、4、7、7、6、6],那么输出将为7。
为了解决这个问题,我们将遵循以下步骤-
num_freq:=新映射
freq_freq:=新映射
diff_freq:=一个新集合
结果:=1
对于每个索引I和以num为单位的num值,请执行
结果:=i+1
结果:=i+1
从diff_freq中删除cur_freq
cur_freq:=num_freq[num]
num_freq[num]:=num_freq[num]+1
freq_freq[cur_freq]:=freq_freq[cur_freq]−1
freq_freq[cur_freq+1]:=freq_freq[cur_freq+1]+1
将cur_freq+1加到diff_freq
如果cur_freq在diff_freq中,并且freq_freq[cur_freq]与0相同,则
df_list:=通过获取diff_freqs的元素来创建新列表
如果df_list的大小等于1,则
否则,当df_list的大小等于2时,以及(当[|freq_freq[df_list[0]]-freq_freq[df_list[1]]|,freq_freq[df_list[0]],freq_freq[df_list[1]]中的任何一个时)是1),并且(当[|df_list[0]-df_list[1]|,df_list[0],df_list[1]]中的任何一个为1时),则
返回结果
让我们看下面的实现以更好地理解-
示例
from collections import defaultdict
class Solution:
def solve(self, nums):
num_freq = defaultdict(int)
freq_freq = defaultdict(int)
diff_freq = set()
result = 1
for i, num in enumerate(nums):
cur_freq = num_freq[num]
num_freq[num] += 1
freq_freq[cur_freq] −= 1
freq_freq[cur_freq + 1] += 1
diff_freq.add(cur_freq + 1)
if cur_freq in diff_freq and freq_freq[cur_freq] == 0:
diff_freq.remove(cur_freq)
df_list = list(diff_freq)
if len(df_list) == 1:
result = i + 1
elif (
len(df_list) == 2
and any(
x == 1
for x in [
abs(freq_freq[df_list[0]] − freq_freq[df_list[1]]),
freq_freq[df_list[0]],
freq_freq[df_list[1]],
]
)
and any(x == 1 for x in [abs(df_list[0] − df_list[1]), df_list[0], df_list[1]])
):
result = i + 1
return result
ob = Solution()
print(ob.solve([2, 4, 4, 7, 7, 6, 6]))输入值
numbers = [2, 4, 4, 7, 7, 6, 6]输出结果
7