慕微 2022-10-28 12:45 采纳率: 100%
浏览 19
已结题

程序冗杂造成时间超限

题目描述
HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢连续两次吃一样的糖果,喜欢先吃一颗A种类的糖果,下一次换一种口味,吃一颗B种类的糖果,这样;可是Gardon不知道是否存在一种吃糖果的顺序使得他能把所有糖果都吃完?请你写个程序帮忙计算一下。

输入
第一行有一个整数T,接下来T组数据,每组数据占2行,第一行是一个整数N(0 < N <= 1000000),表示糖果的种类。第二行是N个数,表示每种糖果的数目Mi(0 < Mi <= 109)。

输出
对于每组数据,输出一行,包含一个"Yes"或者"No"。

样例输入 Copy
2
3
4 1 1
5
5 4 3 2 1
样例输出 Copy
No
Yes
求问:一般应从哪些方面优化程序;
次啊面试我写的代码,程序正确但时间超限

img

  • 写回答

1条回答 默认 最新

  • X-道至简 2022-10-28 18:34
    关注

    这种是排列的问题,有一种思路是插空法 就是选出来最大的那种糖果的数量 假设是m个,那么这个m个作为一个排列,中间需要插入其它糖果,至少是m-1个,也就是有m-1个空位。如果剩余的糖果总和小于m-1个,那么这种最大的种类肯定是有相邻的,如果大于m-1个只要依次插入到上面m-1个空位就行了
    所以代码可以简化为 计算输入糖果总和s + 计算最大种类的m 判断一下 s-m > m-1 输出yes,else no。 只要一层循环即可


    还有一种方法就是,从大到小进行排序,然后从头开始逐步消除,消除到最后最后剩下1或者0,输出yes,else no。这种需要一个排序
    例如消除的方式是 5 4 3 2 1 , 5 4消除剩下1, 1 3消除剩下 2, 2 2消除剩下0, 0 1消除剩下 1, yes


    多插一句,多刷点面试题,现在变态的很

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月5日
  • 已采纳回答 10月28日
  • 创建了问题 10月28日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度