배열의 모든 요소를 ​​동일하게 만들기위한 최소 삭제 작업


난이도 쉽게
자주 묻는 질문 어도비 벽돌 팩트 셋
배열 해시

다음과 같은 입력이 있다고 가정합니다. 정렬 + "X" 요소 수. 우리는 동일한 배열을 만드는 데 필요한 최소값이어야하는 삭제 작업을 찾아야한다는 문제가 있습니다. 즉, 배열은 동일한 요소로 구성됩니다.

입력:

[1, 1, 4, 6, 2, 1]

출력:

3

설명 :

(4, 6, 2) 3 개의 요소를 제거한 후 배열은 동일하게됩니다. 즉, [1, 1, 1]

입력:

[1, 5, 4, 16, 32, 9]

출력:

5

설명 :

5 개 요소 중 하나를 제거하여 동일한 배열로 만들 수 있습니다.

암호알고리즘

  1. 배열의 모든 요소의 빈도를지도에 저장합니다.
  2. 세트 "최대_주파수"INT_MIN.
  3. 지도를 반복하고 최대 빈도가있는 요소를 확인합니다.
    • 세트 "최대_주파수"최대 (최대 _ 주파수, 값) 모든 주파수 중에서 최대 값을 찾습니다.
  4. 배열 크기의 차이를 반환 "엔"max_freq (n – max_freq).

설명

우리는 얼마나 많은 최소값을 찾아야하는 문제를주었습니다. 삭제 (유사한 요소의) 배열을 동일하게 만들려면 연산이 필요합니다. 이를 위해지도를 사용하여 주파수 배열에있는 각 숫자의.

이렇게하면 모든 주파수 중에서 가장 큰 주파수를 갖게됩니다. 지도를 반복하면 max 메소드를 사용하여 최대 주파수를 얻을 수 있습니다. 반복 후 지도 우리는 최대 주파수를 가질 것이고 array_size를 반환해야합니다 – 최대 주파수, 그것은 배열을 동일하게 만들기 위해 제거 할 수있는 더 적은 주파수의 총 수를 반환한다는 것을 의미합니다.

예를 들어 보겠습니다.

arr : {10, 3, 4, 4, 2, 4};

  • i = 0, arr [i]를 10으로하고 freq (10, 1)을 저장합니다.
  • i = 1, arr [i]를 3으로하고 freq (3, 1)을 저장합니다.
  • i = 2 인 경우 arr [i]를 4로하고 freq (4, 1)을 저장합니다.
  • i = 3이면 arr [i]를 4로 취합니다. 4는 이미지도에 위치가 있기 때문에 4의 주요 위치에 계수를 하나 더 추가하고 freq (4, 2)를 저장합니다.
  • i = 4, arr [i]를 2로하고 freq (2, 1)을 저장합니다.
  • i = 5의 경우 arr [i]를 4로 취합니다. 4는 이미지도에 위치가 있기 때문에 4의 주요 위치에 계수를 하나 더 추가하고 freq (4, 3)을 저장합니다.

이 모든 숫자 중 '4'는 최대 주파수가 3이고지도에서 최대 주파수를 3으로 찾은 후 값을 반환합니다 (n – max_freq). 3. 그것이 우리의 결과입니다.

실시

배열의 모든 요소를 ​​동일하게 만들기위한 최소 삭제 작업을위한 C ++ 프로그램

#include <bits/stdc++.h>
using namespace std;

int minDelete(int arr[], int n)
{
    unordered_map<int, int> freq;
    for (int i = 0; i < n; i++)
        freq[arr[i]]++;

    int max_freq = INT_MIN;

    for (auto itr = freq.begin(); itr != freq.end(); itr++)
        max_freq = max(max_freq, itr->second);

    return n - max_freq;
}
int main()
{
    int arr[] = { 10, 3, 4, 4, 2, 4 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << minDelete(arr, n);
    return 0;
}
3

배열의 모든 요소를 ​​동일하게 만들기위한 최소 삭제 작업을위한 Java 프로그램

import java.util.HashMap;
class minimumDeletionOperation
{
    public static int noOfMinimumDeletions(int arr[], int n)
    {
        HashMap<Integer,Integer> freq=new HashMap<Integer,Integer>();
        for(int i=0; i<arr.length; i++)
        {
            if(freq.containsKey(arr[i]))
                freq.put(arr[i], freq.get(arr[i]) + 1);
            else
                freq.put(arr[i], 1);
        }

        int max_freq=Integer.MIN_VALUE;

        for (int i:freq.keySet())
            max_freq = Math.max(max_freq, freq.get(i));

        return n - max_freq;
    }
    public static void main(String args[])
    {
        int arr[] = { 10, 3, 4, 4, 2, 4 };
        int n = arr.length;
        System.out.println(noOfMinimumDeletions(arr, n));
    }
}
3

배열의 모든 요소를 ​​동일하게 만들기위한 최소 삭제 작업에 대한 복잡성 분석

시간 복잡성

O (n) 여기서 "엔" 배열의 요소 수입니다.

공간 복잡성

O (n) 여기서 "엔" 배열의 요소 수입니다.