LeetCode题目:1338. 数组大小减半

题目

题目链接:https://leetcode-cn.com/problems/reduce-array-size-to-the-half/
题目解析:其实题目还是很简单的,就是将数组中相同的数字当作一个个集合,问删除多少这样的集合可以使得数组的长度变成一半。
1. 先将数组中对应数字的数量计算出来
2. 然后排序,由大到小
3. 判断加多少个相加的时候会大于数组长度的一般
在这里插入图片描述

代码

import java.util.Map;
import java.util.Map.Entry;
class Solution {
    public int minSetSize(int[] arr) {
    	//创建答案
		int ans=0;
		//创建map集合用于存放每个数字对应的数量
		Map<Integer, Integer> map = new HashMap<Integer, Integer>();
		//循环遍历
		for (int i=0;i<arr.length;i++) {
			if(!map.containsKey(arr[i])) {
				map.put(arr[i], 1);
			}else {
				map.put(arr[i], map.get(arr[i])+1);
			}
		}
		//创建集合用于存放数字对应的数量
		List<Integer> list = new ArrayList<Integer>();
		for (Entry<Integer,Integer> e : map.entrySet()) {
			list.add(e.getValue() );
		}
		//进行排序
		Collections.sort(list);
		System.out.println(list.toString());
		int sum = 0;
		//循环判断
		for (int j=list.size()-1;j>=0;j--) {
			if(list.get(j)>=(arr.length/2)) {
				return 1;
			}
			else if(sum>=(arr.length/2)) {
				break;
			}
			else {
				sum = sum + list.get(j);
				ans++;
			}
		}
		return ans;

	 }
    
}

总结

我只是想到这一方法,但是速度是真的慢,所以如果有人可以优化,可以告诉一下我,我实在是太菜了。

猜你喜欢

转载自blog.csdn.net/qq_41816516/article/details/106764841