Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 동일한 빈도의 시퀀스를 찾는 프로그램

<시간/>

숫자 목록이 있다고 가정합니다. 시퀀스에서 숫자를 삭제할 때 각 숫자가 동일한 횟수만큼 발생하도록 가장 긴 숫자 시퀀스의 길이를 찾아야 합니다.

따라서 입력이 숫자 =[2, 4, 4, 7, 7, 6, 6]과 같으면 출력은 7이 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • num_freq :=새 지도

  • freq_freq :=새 지도

  • diff_freq :=새로운 세트

  • 결과 :=1

  • 각 인덱스 I 및 값 num(숫자)에 대해 수행

    • cur_freq :=num_freq[숫자]

    • num_freq[숫자] :=num_freq[숫자] + 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과 같으면

      • diff_freq에서 cur_freq 삭제

    • df_list :=diff_freqs의 요소를 사용하여 새 목록

    • df_list의 크기가 1과 같으면

      • 결과 :=나는 + 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인 경우),

      • 결과 :=나는 + 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