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;

	 }
    
}

总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值