给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。 如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。

package com.pshdhx.easy;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。
 * 如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。
 * @author pshdhx
 * 入:arr = [1,2,2,1,1,3]
输出:true
解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。
 *
 */
public class UniqueOccurrences {
	/**
	 * 没什么想法,还是暴力枚举,用list和set的大小来判断有无重复数据;
	 * @param arr
	 * @return
	 */
	public boolean uniqueOccurrences(int[] arr) {
		Set<Integer> set2 = new HashSet(); //用set来存储数组中去重后的数据,用来进行第一次遍历
		for(int i=0;i<arr.length;i++) {
			set2.add(arr[i]);
		}
		List<Integer> list = new ArrayList<>();
		Set<Integer> set = new HashSet();
		for(Iterator iterator = set2.iterator();iterator.hasNext();) {
			int a = (int)iterator.next();
			int count = 0; //计数器
			for(int j=0;j<arr.length;j++) {
				if(a == arr[j]) {
					++count;
				}
			}
			list.add(count);
			set.add(count);
			
		}
		//System.out.println(list.toString());
		//System.out.println(set.toString());
		//在判断list中有没有相同的数据,返回true or false
		if(set.size() == list.size()) { //没有重复的数据
			return true;
		}else {
			return false;
		}
    }
	/**
	 * 哈希法
	 * @param arr
	 * @return
	 */
	 public boolean uniqueOccurrences2(int[] arr) {
	        Map<Integer, Integer> occur = new HashMap<Integer, Integer>();
	        for (int x : arr) {
	            occur.put(x, occur.getOrDefault(x, 0) + 1);
	        }
	        Set<Integer> times = new HashSet<Integer>();
	        for (Map.Entry<Integer, Integer> x : occur.entrySet()) {
	            times.add(x.getValue());
	        }
	        return times.size() == occur.size();
	 }

	public static void main(String[] args) {
		boolean uniqueOccurrences = new UniqueOccurrences().uniqueOccurrences(new int[] {1,2});
		System.out.println(uniqueOccurrences);
	}
}

猜你喜欢

转载自blog.csdn.net/pshdhx/article/details/109339030