​LeetCode刷题实战575:分糖果

程序IT圈

共 1596字,需浏览 4分钟

 ·

2022-04-11 11:53

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 分糖果,我们先来看题面:
https://leetcode-cn.com/problems/distribute-candies/

Alice has n candies, where the ith candy is of type candyType[i]. Alice noticed that she started to gain weight, so she visited a doctor.


The doctor advised Alice to only eat n / 2 of the candies she has (n is always even). Alice likes her candies very much, and she wants to eat the maximum number of different types of candies while still following the doctor's advice.


Given the integer array candyType of length n, return the maximum number of different types of candies she can eat if she only eats n / 2 of them.

Alice 有 n 枚糖,其中第 i 枚糖的类型为 candyType[i] 。Alice 注意到她的体重正在增长,所以前去拜访了一位医生。

医生建议 Alice 要少摄入糖分,只吃掉她所有糖的 n / 2 即可(n 是一个偶数)。Alice 非常喜欢这些糖,她想要在遵循医生建议的情况下,尽可能吃到最多不同种类的糖。

给你一个长度为 n 的整数数组 candyType ,返回:Alice 在仅吃掉 n / 2 枚糖的情况下,可以吃到糖的 最多 种类数。

示例                         


示例 1:

输入:candyType = [1,1,2,2,3,3]
输出:3
解释:Alice 只能吃 6 / 2 = 3 枚糖,由于只有 3 种糖,她可以每种吃一枚。

示例 2:

输入:candyType = [1,1,2,3]
输出:2
解释:Alice 只能吃 4 / 2 = 2 枚糖,不管她选择吃的种类是 [1,2]、[1,3] 还是 [2,3],她只能吃到两种不同类的糖。

示例 3:

输入:candyType = [6,6,6,6]
输出:1
解释:Alice 只能吃 4 / 2 = 2 枚糖,尽管她能吃 2 枚,但只能吃到 1 种糖。


解题


主要思路:直观的想,就是先统计出总共有多少种糖果,若是糖果种类的数量小于等于糖果总数量的一半,则直接返回糖果的种类即可,若是超过了糖果总数量的一半,则直接返回糖果总数量的一半即可 .

class Solution {
public:
    int distributeCandies(vector<int>& candies) {
        unordered_set<int> st;
        //统计总共的糖果的种类
        for(int& num:candies){
            if(st.count(num)==0){
                st.insert(num);
            }
        }
        //根据种类是否超过了总的数量的一半,来判断返回值
        return st.size()<=(candies.size()/2)?st.size():candies.size()/2;
    }
};

好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。

上期推文:

LeetCode1-560题汇总,希望对你有点帮助!
LeetCode刷题实战561:数组拆分 I
LeetCode刷题实战562:矩阵中最长的连续1线段
LeetCode刷题实战563:二叉树的坡度
LeetCode刷题实战564:寻找最近的回文数
LeetCode刷题实战565:数组嵌套
LeetCode刷题实战566:重塑矩阵
LeetCode刷题实战567:字符串的排列
LeetCode刷题实战568:最大休假天数
LeetCode刷题实战569:员工薪水中位数
LeetCode刷题实战570:至少有5名直接下属的经理
LeetCode刷题实战571:给定数字的频率查询中位数
LeetCode刷题实战572:另一棵树的子树
LeetCode刷题实战573:松鼠模拟
LeetCode刷题实战574:当选者

浏览 7
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报