【今日头条】面试题-最少分配糖块问题

这篇博客探讨了在面试中常见的算法题——最少分配糖块问题。文章提供了两种解决方案,分别是方法1和方法2,它们的时间复杂度都是O(N^2)。通过具体的例子,如不同分数对应的糖果数分配,解释了解题思路,如分数为[80, 90, 99, 80, 70]时,糖果数为[1, 2, 3, 2, 1],总糖果数为9,展示了如何确保公平分配的同时尽量减少总的糖果数量。" 138564195,9078080,C/C++ 实现快速傅里叶变换(FFT)算法详解,"['算法', 'C语言', 'C++', '数据结构', '信号处理']
摘要由CSDN通过智能技术生成
/**
 * 分配最少糖果问题
 * 2021-02-23 20:00-21:30 头条一面
 * 只有一个算法题目,现场紧张,有些bug没有调试出来。
 * ---------------------------------------------
 * 题目介绍:
 * 你是学校老师, 有n个学生; 某次考试后, 你让n个学生排成一排,
 * 按照他们的分数来给予奖励; 奖励为发送糖果, 每个孩子至少会得到一个糖果;
 * 另外如果某个孩子发现他的分数比相邻同学分数高, 但是糖果却不比他们多,
 * 便会不开心;你需要用最少的糖果来让所有孩子都开心;
 * example1: 分数为 80 90 99 80 70:
 * 那糖果最少给1+2+3+2+1 = 9
 * example2: 分数为[80,90,99,100,90,80,81]
 * 糖果: [1,2,3,4,2,1,2]; 总数15
 * example3:[80,0,100]
 * 糖果:[2,1,2], 总数5
 * example3:[80, 90, 99, 99, 99, 100, 90, 80, 88,88]
 * 糖果:[1, 2, 3, 3, 3, 4, 2, 1, 2, 2]; 总数23
 * ---------------------------------------------
 * 思路分析:
 * S1: 创建数组nums,存储每个学生分配的糖果数,均初始化1,保证每个学生至少一块糖果;
 * S2: 从左向右遍历:
 *     if nums[i+1]>nums[i], nums[i+1] = nums[i]+1;
 *     else if nums[i+1]==nums[i],nums[i+1] = nums[i];
 * S3: 从右向左遍历:
 *     if nums[i]>nums[i+1], nums[i] = nums[i+1]+1;
 *     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值