Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 O(1) 추가 공간 및 O(n) 시간의 배열에 있는 모든 요소의 빈도 계산

<시간/>

값 1에서 n까지의 요소 배열이 제공됩니다. 일부 요소는 반복되고 일부는 누락되었습니다. 목표는 O(n) 시간과 O(1) 추가 공간에서 모든 요소의 주파수를 찾는 것입니다.

입력

Arr[]={ 1,2,2,3,4,4,4,5 }

출력

1→1,2→2,3→1,4→3,5→5

설명 − 가장 높은 요소는 5이며 출력은 각 요소가 배열에 나타나는 횟수를 보여줍니다.

입력

Arr[]={ 1,4,4,5,5,5,5 }

출력

1→ 1, 2→0, 3→ 0, 4→ 2, 5→ 4

설명 − 가장 높은 요소는 5이며 출력은 각 요소가 배열에 나타나는 횟수를 보여줍니다.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 아래 프로그램은 1에서 10 사이의 숫자를 가진 배열에서 작동합니다.

  • 함수 printfrequency(int arr[],int n)은 배열과 크기 n을 입력으로 사용하고 배열에 있는 1에서 10 사이의 숫자 개수를 반환합니다.

  • 각 인덱스가 숫자 i의 빈도를 저장하도록 arr[i]=arr[i]-1을 만들고, 인덱스 0에 1을 저장하는 식으로 합니다.

  • 각 주파수에서 for 루프를 사용하여 arr[arr[i]%10] 원래 값에 10을 더합니다.

  • x 번의 경우 배열에서 숫자 i가 x 번 발생하면 10이 추가됩니다.

  • 이제 인덱스 i의 모든 요소 i+1에 대해 arr[i]/10을 사용하여 for 루프 인쇄 빈도를 ​​사용합니다.

예시

#include네임스페이스 std;void printfrequency(int arr[],int n){ int i=0; //1이 0이 되고, 2가 1이 .....10이 9가 되므로 arr[i]는 ( i =0; i " < 

출력

<미리>1 -> 02 -> 23 -> 24 -> 05 -> 16 -> 17 -> 38 -> 29 -> 510 -> 0