百度笔试A卷

第一题 min*2>=max

先找最小值,然后ans+=(nums[i]-1)/(min*2)

例:

  1. 最小值为3
  2. min*2=6
  3. 任何大于6的num最优分解是6+(num-6)
  4. 总的分解次数就是(num-1)/6
  5. 补充:7实际不能分解为1+6而应该分解为3+4,但是我们不需要单独处理这种情况,只需要知道都是分解一次即可

要用long long,没用20%

第二题 gcd

同一个区间所有数gcd,然后*区间大小,最后所有区间加起来就行

要用long long ,没用0%

第三题 先递增后递减

我过了25,10%单独判断是否有序,15%正常求解

我的想法是

  1. 先找到最小的,然后移动到最左或最右(比较一下哪边近)(不用真的移动,直接删除此元素即可)
  2. 然后对剩余元素重复此过程

O(n2)时间复杂度,n<=5e5。没想到只能过15%

可以用数组或链表,链表稍好,但写起来比较麻烦。然后有一个做完才想到的优化方案,判断一下最小的元素接下来一位是否相同,这样可以少遍历一次,对于相同元素很多的情况可以节省不少时间。

这个思路优化空间挺有限的,答案应该不是这个思路,但确实想不到其他方案,当然想思路就想了好久。

————————————————————————————————————————————————————————————————————

贴一下大佬解法:

https://www.nowcoder.com/feed/main/detail/2f03cd0f656c42e8b42e668f902cdb7b?sourceSSR=search

有点印象,当时学的时候是说可以逆序对,但也仅限有印象了。

全部评论
大佬受教了,前两到都a了,第三道没思路
点赞 回复 分享
发布于 昨天 22:06 四川
第一题需不需要考虑拆分之后最小值更新
点赞 回复 分享
发布于 昨天 22:05 辽宁
第一道题没用longlong百分之20.。。
点赞 回复 分享
发布于 昨天 21:51 河南

相关推荐

代码不跑我跑_秋招版:区间有啥啊,薪资区间本来就容易猜出来,你就说是别人猜的呗
点赞 评论 收藏
分享
评论
点赞
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务