鱼C论坛

 找回密码
 立即注册
123
返回列表 发新帖
楼主: zltzlt

[已解决]Python:每日一题 336

[复制链接]
 楼主| 发表于 2020-2-25 15:19:19 | 显示全部楼层
我爱学习. 发表于 2020-2-21 16:52
哈哈想了半天没想出正常的解法,因为这个有点复杂,他可能会出现【5,60,100】这样的情况,这就不单单是一 ...

输入 m = 3, woods = [2, 3, 4] 没有返回值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-25 15:19:50 | 显示全部楼层
kinkon 发表于 2020-2-21 23:24
想了好久才理清思路,感觉有些难度

会超时
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-25 15:20:28 | 显示全部楼层

返回值不能是小数哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-25 15:21:21 | 显示全部楼层
阴阳神万物主 发表于 2020-2-22 00:48
暴力破解,暂未想到更便捷的方案。

会超时
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-25 15:24:58 | 显示全部楼层
大家会超时的输入数据:

testdata.zip (180.29 KB, 下载次数: 8)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 20:09:02 | 显示全部楼层
厉害了,哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-28 18:35:27 From FishC Mobile | 显示全部楼层
本帖最后由 kinkon 于 2020-3-3 18:14 编辑

终于弄了个分钟能跑完超长数据的准确程序,累死宝宝了...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-4 11:43:56 | 显示全部楼层
本帖最后由 kinkon 于 2020-3-5 09:15 编辑

解题如下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-5 09:10:06 | 显示全部楼层
引用了外部模块,解楼主给的超长数据,自己测试,时长8秒
import numpy as np
def p336(m,woods):
    woods1 = np.sort(np.array(woods))[-m:][::-1]
    lmin, pmax = max(woods) // m, sum(woods) // m
    if woods1.size <= 1:
        return lmin
    if m == 1:
        return max(woods)        
    nwoods = np.unique(woods1)[::-1]
    t = k = rec = 0
    while k < nwoods.size:        
        t += 1                           
        tmp, c = nwoods[k]//t, 0        
        if lmin <= tmp <= pmax:
            if tmp > rec:                
                c = np.sum(woods1//tmp)              
            else:
                k += 1
                t = 0                        
            if c >= m: 
                rec = max(rec, tmp)                
                k += 1
                t = 0
        else:
            if t == m:
                k += 1  
    return rec
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-18 09:15:09 | 显示全部楼层    本楼为最佳答案   
本帖最后由 kinkon 于 2020-4-18 09:49 编辑

经历一段学习,终于能按要求完成,二分法
def f336(m,woods):    
    if m <= 0 or not woods:
        return 0
    left, right = min(woods), sum(woods) // m   
    nds = lambda mid: sum(wood // mid for wood in woods) >= m
    while left + 1 < right:
        mid = left + (right - left)//2        
        if nds(mid):
            left = mid
        else:
            right = mid
    if nds(right):
        return right
    elif nds(left):
        return left
    return 0

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-18 13:18:14 | 显示全部楼层
kinkon 发表于 2020-4-18 09:15
经历一段学习,终于能按要求完成,二分法

251 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 15:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表