1-n,n个正整数中任取m个数计算乘积,求这些乘积的和?

你对这个回答的评价是?

下载百度知道APP,抢鲜体验

使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。

这是一个Google笔试题,我5年前看到的。

设有一整数数组,元素个数为N,求其中N-1个元素相乘的最大乘积。

1. 时间复杂度尽可能低

单元测试我写好了,敢上擂台的同学,把代码贴到下面,我来检查能通过几个单元测试,哈哈。

挑擂结果(有两个测试用例我只占了个位,没写具体的数据。下面的结果都不包含这两个用例)

JoyQi 目前最接近标准答案的,只有2个测试用例没通过,时间复杂度,我目测是没到最小,但跟我写的也不相伯仲,如果用C语言来实现,是循环更耗费时间还是大数相除更耗费时间就不好说了。

Sunyanzi 的还差三个测试用例没通过 *参数输入正确的正常流程 *参数输入错误的异常流 * 本来根据根据负数个数奇偶性、正数有无可以分成四种情况 * 但这四种情况明显可以归并到这一种,因此不再分成四个条件来写 * 零的个数等于1 偶数个负数 有正数 * 零的个数等于1 偶数个负数 无正数 * 零的个数等于1 奇数个负数 有正数 * 零的个数等于1 奇数个负数 无正数 * 零的个数小于1 偶数个负数 有正数 * 零的个数小于1 偶数个负数 无正数 * 零的个数小于1 奇数个负数 有正数 * 零的个数小于1 奇数个负数 无正数 * 输入的参数不是数组 * 数组元素个数小于2个 * 数组元素不全是整数 * 如果代码中用整形来记录【零、正数、负数】的个数,输入的数组元素个数超过int型上限,就会造成数据溢出 //这种极端情况不支持,也不测试,写在这里仅仅表示我考虑到这点了 * N-1个元素的乘积超过PHP能表达的上限,就会造成数据溢出 //这种情况暂时不支持,也不测试,写在这里仅仅表示我考虑到这点了 }公布答案了:我的函数实现 * 先遍历数组找出零、负数、正数的数量 * 只做统计,不排序,不做乘法 * 0的个数大于1,任意取N-1个元素,其乘积都是0 * 故无须再判断正数和负数的个数 * 最大乘积只能是0,无需判断正数个数 * 除0之外的N-1个整数乘积最大 * 除【绝对值最小的负数】之外的N-1个整数乘积最大 * 除【绝对值最小的正数】之外的N-1个整数乘积最大 * 除【绝对值最大的负数】之外的N-1个整数乘积最大 * 若需要计算N-1个元素的乘积

  1. 这是我做《如何设计完备可靠的测试用例》培训用的一个代码示范,在github上开源的:,会持续更新,敬请关注
  2. 我贴出来的测试用例只有“参数输入正确的正常流程”是100%做到了MECE(完全穷尽,彼此独立),“参数输入错误的异常流”还没做到MECE,极端情况的“白盒测试”就更谈不上MECE了,而且也没写测试方法体

我要回帖

更多关于 输入两个正整数m和n 的文章

 

随机推荐