算法:圆桌分奖品问题(字节跳动2019笔试)

字节跳动2019笔试题

问题描述

圆桌n个人,每一个人有一个得分,相邻两人中得分高的人得到的奖品比得分低 的人多。每个人至少获得一个奖品,问一桌人至少需要准备多少奖品。

输入: 人数n,圆桌上每个人的得分s (n维数组)

输出: 最少需要的奖品数m

解法

因为是圆桌,得分数组s应该看作循环列表。找出其中的局部极小点,即得分比左右两人都低的人,由循环列表的特性可知这样的人至少存在一个。我们给极小点一个奖品,然后给极小点两边比极小点大的人2个奖品,在给2个奖品旁边得分更高的人3个奖品,以此类推直到所有人都分到奖品;如果有人从不同的极小点开始计算得到奖品数不同,则取奖品数最多的计算方式。

举例

8个人得分1,3,5,7,2,4,6,8,此时极小点有两个(1和2),首先给得分为1和2的两人1个奖品;3在1的旁边,因此获得2个奖品,同理5获得3个奖品,得分为7的人按左边1-3-5-7的顺序应该获得4个奖品,按右边2-7的顺序应该获得2个奖品,取奖品多的一边,即4个。同理,4,6,8分别获得2,3,4个奖品,总共1+2+3+4+1+2+3+4=20个奖品。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值