题外话:又是N久没有更博,今后争取每天总结。

Leetcode上的新题,难度是Easy,我是按照acceptance刷的,所以经常遇到新题^_________^

题目:

Given an integer array with even length, where different numbers in this array represent different kinds of candies. Each number means one candy of the corresponding kind. You need to distribute these candies equally in number to brother and sister. Return the maximum number of kinds of candies the sister could gain.

题意解读:

给出偶数长度的一个数组,其中不同的数字代表不同种类的糖果。每个数字代表对应的种类,需要将这些糖果 数量平均 地分给你的哥哥和姐姐(好吧,或者弟弟妹妹)。要求返回姐姐可能获得糖果种类的最大值。

输入范围:

  1. The length of the given array is in range [2, 10,000], and will be even.
  2. The number in given array is in range [-100,000, 100,000].

思路分析:

1. 1M的内存空间可以支持32位int型数组大小为26万+,所以可以使用int或bool型数组对所有第一次出现的candy种类进行记录,并使用kindnum变量记录不同candy种类数,如果出现过则不修改kindnum。最终根据kindnum大小进行返回操作,若kindnum大于candies长度一半,则sister最多获得candies.size()/2种糖果;若小于,则返回kindnum。

2. 也可以用map数据结构,对每个出现的candy用pair进行记录,每次对整个map数据结构进行find查找,若没有出现过该种类candy,则insert新的pair。最终根据map的元素数量进行返回操作,原理同第一种解法。

下面给出上面两种思路的代码,效率都不是很高,分别199ms和440ms,虽然都是一次AC,但感觉解法还不够优化。欢迎大家的指导和讨论。

第一种解法:

        int distributeCandies(vector<int>& candies) {if(candies.size()<1)return 0;bool kinds[200005] = {0};int kindnum = 0;for(int i = 0; i<candies.size(); i++){int idx = candies[i] + 100000;if(!kinds[idx]){kinds[idx] = 1;kindnum ++;}}if(kindnum >= candies.size()/2)return candies.size()/2;return kindnum;}

第二种解法:

 int distributeCandies(vector<int>& candies) {if(candies.size()<1)return 0;map<int, bool> kinds;for(int i = 0; i<candies.size(); i++){int kindnum = candies[i];map<int, bool>::iterator iter = kinds.find(kindnum);if(iter == kinds.end())kinds.insert(pair<int,bool>(kindnum,true));}if(kinds.size()>=candies.size()/2)return candies.size()/2;else return kinds.size();}

LeetCode | 575. Distribute Candies相关推荐

  1. LeetCode 575. Distribute Candies

    575. Distribute Candies 一.问题描述 Given an integer array with even length, where different numbers in t ...

  2. 575. Distribute Candies*

    575. Distribute Candies* https://leetcode.com/problems/distribute-candies/ 题目描述 Given an integer arr ...

  3. []575. Distribute Candies

    problem 575. Distribute Candies 理解题意:主要是计算candies的种类数. 如果大于candies数目的一半,则返回一半的值,否则,返回candies的种类数. so ...

  4. 575. Distribute Candies 平均分糖果,但要求种类最多

    [抄题]: Given an integer array with even length, where different numbers in this array represent diffe ...

  5. Distribute Candies

    Distribute Candies int distributeCandies(vector& candies) { int cnt = 1;//初始有一种int N = candies.s ...

  6. C#LeetCode刷题之#575-分糖果​​​​​​​(Distribute Candies)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3798 访问. 给定一个偶数长度的数组,其中不同的数字代表着不同种 ...

  7. LeetCode 575. 分糖果(set集合去重)

    1. 题目 给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果.你需要把这些糖果平均分给一个弟弟和一个妹妹.返回妹妹可以获得的最大糖果的种类数. 输入: candies ...

  8. leetcode 575. 分糖果

    class Solution(object):def distributeCandies(self, candies):""":type candies: List[in ...

  9. leetcode 575 分糖果

    class Solution {public int distributeCandies(int[] candies) {int pre=-100001;Arrays.sort(candies);in ...

最新文章

  1. Redis缓存穿透、击穿、雪崩及主从复制
  2. 各种页面刷新代码大全,asp/javascript刷新页面代码
  3. python PIL 打开\显示\保存图像
  4. ARC106——E - Medals
  5. 垃圾收集算法,垃圾收集器_确定活动的热点垃圾收集器
  6. 如何保证投票公平_从声音玩具淘汰、五条人复活,我看到了《乐队的夏天》的不公平...
  7. 客制化键盘编程_开学在即,国产机械键盘怎么选
  8. python做界面用什么软件好_pyqt | 做一个好用的图形界面软件
  9. seL4操作系统基础01:seL4 whitepaper概览
  10. DB与ES混合应用之数据实时同步
  11. 6-1 多态性与虚函数
  12. 设计模式之GOF23策略
  13. Python:下载安装包
  14. 计算机如何取消自动关机,如何取消自动关机命令
  15. 国内数据资源共享平台介绍
  16. 成功注册一个谷歌账号
  17. Windows NAT端口映射
  18. 《系统工程理论与实践》Latex 模板使用教程
  19. linux登录提示文件 motd 有趣的motd
  20. python中五个一行输出_python 如何将一系列数字十个一行输出

热门文章

  1. 在mysql中创建和调试存储过程
  2. JAVAswing编写界面
  3. outlook邮箱链接如何用ie打开_Outlook手机邮箱配置文档
  4. 做企业数字化转型的最佳拍档,中软国际的变与不变
  5. 磊科linux无线网卡驱动安装步骤,如何安装磊科无线网卡驱动教程
  6. Loss.backward()
  7. Java大作业-商品管理系统
  8. 哪些外贸软件比较好用?常用外贸软件有哪些?
  9. 知乎神回复:曾经删了雷军代码的人现在怎么样了?
  10. 一文详解 .obj 和 .mtl文件格式