ポンクモン


問題の説明(要約)


全部でN個の携帯ケースからN/2個を取ることができます
Phonecket Monsterはタイプによって番号付けと区別を行います.そのため、同じタイプの携帯電話のガードプロセスには同じ番号があります.
例えば、全部で4つの携帯電話のガードプロセスがあり、各携帯電話のガードプロセスのタイプ番号が[3番、1番、2番、3番]であれば、3番の携帯電話のガードプロセスが2つ、1番の携帯電話のガードプロセスが1つ、2番の携帯電話のガードプロセスが1つあることを示します.このとき、4つのケースの中から2つを選ぶ方法は、以下の6つがあります.
1.第1(3)、第2(1)
2.第一(3)、第三(2)
3.第1回(3回)、第4回(3回)
4.第2(1)、第3(2)
5.第2(1)、第4(3)
6.第三(2)、第四(3)
この場合、1番目(3)Phonecketmonと4番目(3)Phonecketmonを選択する方法は1つ(3)Phonecketmonしかありませんが、他の方法は2つのPhonecketmonがあります.したがって、上記の例では、携帯電話のケースタイプ数の最大値は2です.
n個の携帯電話ガードプロセスタイプ番号を含む配列numsをパラメータとして指定すると、N/2個の携帯電話ガードプロセスを選択する方法のうち、最も多くのタイプの携帯電話ガードプロセスを選択する方法を見つけ、解法関数を完了し、当時の携帯電話ガードプロセスタイプ番号の個数を返す.

せいげんじょうけん

  • numsは、携帯電話のデーモンプロセスのタイプ番号を含む1次元配列です.
  • numsの長さ(N)は1または10000以下の自然数であり、常に偶数である.
  • 携帯電話のガードプロセスのタイプ番号は1または2万0以下の自然数です.
  • 最も多くのタイプの携帯電話のデーモンを選択する方法が複数ある場合は、最大1つの選択可能な携帯電話のデーモンタイプの値を返すだけでよい.
  • I/O例

    nums			result
    [3,1,2,3]		2
    [3,3,3,2,2,4]	3
    [3,3,3,2,2,2]	2

    私のコメント(JAVA)


    最大
  • 種類を選択するには、重複データを削除し、N/2の数字を選択します.重複除外の数がN/2未満の場合は、重複除外の数しか選択できません.
  • import java.util.*;
    
    class Solution {
        public int solution(int[] nums) {
            // 정렬
            Arrays.sort(nums);
            
            // 중복 제거
            ArrayList<Integer> arr = new ArrayList<Integer>();
            arr.add(nums[0]);
            int num = nums[0];
            for (int i=1; i<nums.length; i++) {
                if (nums[i] != num) {
                    arr.add(nums[i]);
                    num = nums[i];
                }
            }
            
            // 중복을 제거한 개수와 N/2 중 더 작은 값 리턴
            return Math.min(arr.size(), nums.length/2);
    }

    他の人の解答(JAVA)

    import java.util.HashSet;
    
    class Solution {
        public int solution(int[] nums) {
            // HashSet은 중복된 값을 허용하지 않는다.
            HashSet<Integer> hs = new HashSet<>();
            for (int i=0; i<nums.length; i++) {
                hs.add(nums[i]);
            }
            
            // 더 작은 값 리턴
            if (hs.size() > nums.length/2) {
                return nums.length/2;
            }
            return hs.size();
        }
    }

    私の解答(JavaScript)

  • 以前のアルゴリズム解から学んだSetを利用した.(喜び)
  • function solution(nums) {
      const arr = [...new Set(nums)];
      return Math.min(arr.length, nums.length/2);
    }

    他の人の解答(JavaScript)

    function solution(nums) {
      const max = nums.length / 2;
      const arr = [...new Set(nums)];
      return arr.length > max ? max : arr.length;
    }