LeetCode575——分糖果

2024-04-04 18:04
文章标签 糖果 leetcode575

本文主要是介绍LeetCode575——分糖果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

     题目链接:. - 力扣(LeetCode)

   

        这道题比较简单,但我还是花费了将近四个小时的时间去解答,AC的那一刻,终于全身舒畅,这道题的思路就是先求出糖果的种数,然后我们从题中可以得出,Alice最少吃一种糖果,最多吃n/2种糖果,我们可以用二分法来写,下面来看代码:

//求出糖果种数,哈希的方式
int typecount(int* a, int size)
{//开辟空间注意数据范围,题上给的a[i]的数据范围是-100000到100000int* hx = calloc(200010,sizeof(int));//calloc开辟出来的空间初始都为0int count = 0;for (int i = 0; i < size; i++){hx[a[i]+100000]++;//因为题上给的a[i]的数据范围是-100000到100000,所以}                     //hx[a[i]+100000]可以避免数组下标是负数for (int i = 0; i < 200010; i++){if (hx[i] != 0)//ha[i]不为0,就说明是一种糖果类型,count++{count++;}}free(hx);//释放calloc开辟的空间return count;
}int check(int mid,int count)
{if (mid < count)return 1;return 0;
}int distributeCandies(int* candyType, int candyTypeSize) {int n = candyTypeSize;int count=typecount(candyType, candyTypeSize);//糖果种类//因为Alice最少吃一种糖果,最多吃n/2种糖果,所以用二分法int l = 1, r = n / 2;while (l < r){int mid = (l + r) / 2;if (check(mid,count)){l = mid + 1;//如果mid<count,更新左边界,l=mid+1,因为mid肯定不是我们要找的值,//所以我们在[mid+1,r]这个区间去找}elser = mid;//如果mid>=count,更新右边界,r=mid,因为mid可能等于count,也就是说//mid可能是我们要找的值,所以我们在[l,mid]这个区间找}return r;//最后返回r就是Alice吃到糖的最多种类数,其实返回l也是可以的,因为到//最后l==r,返回哪个都是可以的
}

       代码注释的很清楚,这里就不再细说了,还需要注意的一点是count可能大于n/2,但是不影响,我们只需要在[1,n/2]这个区间找就好了。

        请注意 :轻易不要定义全局变量,很危险的,我就是因为把hx定义成全局变量,调试了很长时间,都过不去,就是找不到问题在哪,一定要记住这个坑呀!(当然,不亲身经历应该是记不住的,希望你们经历后,再来看这段话是什么感受)

这篇关于LeetCode575——分糖果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/876475

相关文章

【最新华为OD机试E卷-支持在线评测】分糖果(100分)-多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线评测,专栏文章质量平均 94 分 最新华为OD机试目录: https://blog.

力扣135-分发糖果(java详细题解)

题目链接:135. 分发糖果 - 力扣(LeetCode) 前情提要: 因为本人最近都来刷贪心类的题目所以该题就默认用贪心方法来做。 贪心方法:局部最优推出全局最优。 如果一个题你觉得可以用局部最优推出全局最优,并且没有反例来反驳的话就可以用贪心来试试。 题目思路: 本题主要就是难在,有俩个维度,当前的孩子不仅要跟左边比,还要跟右边比。 可能我们一开始就想遍历孩子,让当前孩子先跟左边

【NO.15】LeetCode经典150题-135. 分发糖果

文章目录 【NO.15】LeetCode经典150题-135. 分发糖果解题:贪心 【NO.15】LeetCode经典150题-135. 分发糖果 135. 分发糖果 【困难】 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。

代码随想录算法训练营第二十九天| 134. 加油站 135. 分发糖果 860.柠檬水找零 406.根据身高重建队列

134. 加油站 题目: 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 gas 和 cost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证

贪心算法---分发糖果

题目: n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。 思路:使用两次贪心思想。 第一次从左到右遍历,只比较右边大于左边的情况,如果ratings[i]>ratings[i-1

九度OJ-1122:吃糖果

就是:N阶楼梯上楼问题。

代码随想录算法训练营第31天| 134. 加油站、135. 分发糖果、860.柠檬水找零、 406.根据身高重建队列

134. 加油站 题目链接:134. 加油站 文档讲解:代码随想录 状态:so easy 思路:每次遍历时,如果当前的油量差(currTank)小于0,说明从当前起点无法到达下一个加油站。此时,将下一个加油站设为新的起点,并重置当前油量差(currTank)。最后检查总的油量差(totalTank),如果总的油量差大于等于0,说明存在一个合法的起点,使汽车能绕完整个环形路;否则不存在

代码随想录算法训练营Day31| 134. 加油站 , 135. 分发糖果 ,860.柠檬水找零 , 406.根据身高重建队列

今天的题目真的写的我一肚子气,真的太气了,一道题都写不出来,再听完题解后,还是觉得没有完全理解,果然菜是原罪,我还是太弱了,继续加油吧!来看今天的第一题 134. 加油站:代码随想录 这道题目的意思就是说一个路上有n个加油站,你现在的初始状态下油是0,你可以选择从一个加油站开始,看你是否能绕路行驶一圈,这道题我想到了,将他所给的gas数组减去cost数组,然后来选,但是我不知道的是怎么来

Leetcode 135. 分发糖果(问题分解)

Leetcode 135. 分发糖果 根据描述,可知更多糖果发生在相邻两个孩子的rating更高者中,对于一个孩子来说,左右两侧都视为相邻,即ratings[ i ] > ratings[ i-1 ] 或 ratings[ i ] > ratings[ i+1 ]都会令糖果增加 由此则将问题分解成两个方面,分别考虑ratings大于左侧和ratings大于右侧两种情况 使用nums[ ] 记录

糖果(信息学奥赛一本通-T1299)

【题目描述】 由于在维护世界和平的事务中做出巨大贡献,Dzx被赠予糖果公司2010年5月23日当天无限量糖果免费优惠券。在这一天,Dzx可以从糖果公司的N件产品中任意选择若干件带回家享用。糖果公司的N件产品每件都包含数量不同的糖果。Dzx希望他选择的产品包含的糖果总数是K的整数倍,这样他才能平均地将糖果分给帮助他维护世界和平的伙伴们。当然,在满足这一条件的基础上,糖果总数越多越好。Dzx最多能带