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

Python에서 일부 작업을 수행하여 적어도 절반의 배열이 0으로 축소 가능한지 확인하십시오.

<시간/>

양의 정수와 또 다른 양의 정수 m을 포함하는 크기 n의 목록이 제공된다고 가정합니다. 현재 루프 내부에 있고 각 반복에서 배열의 일부 요소 값을 1로 줄이고 나머지 요소의 값을 m만큼 증가시킨다고 가정해 보겠습니다. 목록의 요소 중 절반 이상이 몇 번의 반복 후에 0으로 바뀌는지 알아내야 합니다. 가능하면 True를 반환하고 그렇지 않으면 False를 반환합니다.

따라서 입력이 input_list =[10, 18, 35, 5, 12], m =4와 같으면 출력은 True가 됩니다.

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

  • frequency_list :=0으로 초기화된 m+1 크기의 새 목록
  • i :=0
  • 내가
  • 주파수 목록[입력 목록[i] 모드(m + 1) ] :=

    주파수 목록[입력 목록[i] 모드 (m + 1) ] + 1

  • 나는 :=나는 + 1
  • i :=0
  • 나는 <=m, do
    • if frequency_list[i]>=(input_list의 크기 / 2) 이면
      • 루프에서 나오다
    • 나는 :=나는 + 1
  • i <=m이면
    • 참 반환
  • 그렇지 않으면
    • 거짓을 반환
  • 이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

    def solve(input_list, m):
       frequency_list = [0] * (m + 1)
       i = 0
       while(i < len(input_list)):
          frequency_list[(input_list[i] % (m + 1))] += 1
          i += 1
       i = 0
       while(i <= m):
          if(frequency_list[i] >= (len(input_list)/ 2)):
             break
          i += 1
       if (i <= m):
          return True
       else:
          return False
    input_list = [10, 18, 35, 5, 12]
    print(solve(input_list, 4))

    입력

    [10, 18, 35, 5, 12], 4

    출력

    True