在我挣扎于各种超时时,想要在其他方面找到突破口,一开始因为联想到hashtable想把所有值加100000,创建一个200000长度的数组a[],把每个数值的值作为其下表,遍历存储所有数值时,判断其位置是否已经被赋值,但200000的数组对于内存太不友好,所以就想按倍数缩减数组长度,然后在存储时加签表,如0-49999的前标是1,50000-99999的前标是2,这样99就会以1000099存在a[99],而50099会以2000099存在a[99],但这样就需要创建的就不是一个int类型数组,而是一个二维数组了。

这时突然想到了枚举类型的一个小技巧,因为计算机二进制存贮的特性,如果把枚举的int值设为2的n次方数,就可以通过”+“创建一个枚举的组,在按位与判断某个枚举类型是否存在于一个枚举的组里。

同理我们可以先把99按1存在a[99]中,当遍历到50099时,先按位判断a[99]和2,再进行a[99]+=2。

这样我们就得到如下代码:

class Solution {
public:int distributeCandies(vector<int>& candyType) {int x;int y;int repeat = 0;vector<int>a(20002, 0);//下标从0开始for (int i = 0; i < candyType.size(); i++){candyType[i] += 100000;}//取余for (int j = 0; j < candyType.size(); j++){if (candyType[j] != 200000){//算出下标x = candyType[j] % 20000;//算出存储内容switch (candyType[j] / 20000){case 0:y = 1;break;case 1:y = 2;break;case 2:y = 4;break;case 3:y = 8;break;case 4:y = 16;break;case 5:y = 32;break;case 6:y = 64;break;case 7:y = 128;break;case 8:y = 256;break;case 9:y = 516;break;case 10:y = 1024;break;}}else{x = 20001; y = 1;}//判断是否重复if ((y & a[x]) == 0){a[x] += y;}else{++repeat;}}int unique = (candyType.size() - repeat);if (unique > candyType.size() / 2){return candyType.size() / 2;}return unique;}
};

其实我觉得如果数据量更大时会使得时间与空间更加平衡。

每日力扣009——575. 分糖果(OnO1)相关推荐

  1. 【快乐水题】575. 分糖果

    原题: 力扣链接:575. 分糖果 题目简述: Alice 有 n 枚糖,其中第 i 枚糖的类型为 candyType[i] .Alice 注意到她的体重正在增长,所以前去拜访了一位医生. 医生建议 ...

  2. LeetCode 力扣C++题解 575. 分糖果

    题目描述:给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果.你需要把这些糖果平均分给一个弟弟和一个妹妹.返回妹妹可以获得的最大糖果的种类数.(难度:简单) 原题链接: ...

  3. LeetCode刷题之575.分糖果

    LeetCode刷题之575.分糖果 我不知道将去向何方,但我已在路上! 时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 ! 题目: 给定一个偶数长度的数组,其中不同的数字代表着不同 ...

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

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

  5. 数组的合并和升序排列_每日“力扣”系列10 下一个排列

    今天继续力扣数组标签的算法题,力扣第31题,难度等级为中等,题目描述如下: 题目要点概括如下: 1.输入部分为一个有顺序的数组,按照数字的前后顺序,这个数字代表着一个位数不定的数字,这里程它为原数字. ...

  6. 【每日力扣10】有效的数独

    一.题目 请你判断一个 9 x 9 的数独是否有效.只需要 根据以下规则 ,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9  ...

  7. 力扣每日一题-第29天-575.分糖果

    2022.6.27今天你刷题了吗? 题目: Alice 有 n 枚糖,其中第 i 枚糖的类型为 candyType[i] .Alice 注意到她的体重正在增长,所以前去拜访了一位医生. 医生建议 Al ...

  8. 【解题报告】Leecode. 575. 分糖果——Leecode每日一题系列

    题目链接:https://leetcode-cn.com/problems/distribute-candies/ 题解汇总:https://zhanglong.blog.csdn.net/artic ...

  9. leetcode 575. 分糖果

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

最新文章

  1. Android怎么不显示手机模型,以编程方式获取Android手机模型
  2. 混沌动力学行为研究-分叉图
  3. JavaFX即将推出您附近的Android或iOS设备吗?
  4. niginx反向代理解决前后端跨域问题
  5. 剖析:3D游戏建模的千奇百变,带你快速入门
  6. python向自己qq邮箱发信息_python 向qq邮箱发邮件
  7. 【kafka】Number of alive brokers 0 does not meet the required replication factor 3
  8. missing 1 required positional argument: ‘on_delete‘报错解决方案
  9. (转)Managed DirectX +C# 开发(入门篇)(八)
  10. Chapter 5 Blood Type——15
  11. 计算机识别键盘流程,电脑键盘拼音打字操作过程
  12. 分享15款免费好用的中文字体
  13. 类似endnote_Mendeley与EndNote类似的免费文献管理软件简介 | 科研动力
  14. Racket语言简单使用
  15. 混沌工程(Chaos Engineering) 总结
  16. 大专一年级计算机考试题,大专一年级语文期中考试试卷.doc
  17. 微信公众号文章采集思路
  18. error: RPC failed; curl 56 GnuTLS recv error (-9): A TLS packet with unexpected length was received.
  19. 关于电子邮件客户端设计中QQ邮箱授权码问题。(运行提示535错误,说授权码error。)
  20. 手把手教你做树莓派魔镜-MagicMirror(七)-接下来

热门文章

  1. xtu oj Patchouli的金字塔
  2. 精通CSS-添加样式
  3. 【RPC实战与核心原理】-第19讲-分布式环境下定位问题
  4. [Practical.Vim(2012.9)].Drew.Neil.Tip03 学习摘要
  5. 计算机班主任总结范文,中等*学校计算机班主任年度的工作总结
  6. Web基础与apache讲解与搭建
  7. 三维点云学习(6)7-3D Object Detection-KITTI object detection evaluation(2)-kitt 数据集文件分卷解压方式
  8. c语言中将分钟的时间转换为小时和分钟并存的形式
  9. 5分钟学会Cron表达式
  10. 怎么取消微信充值服务器,微信亲密充充值提醒怎么取消?