鱼C论坛

 找回密码
 立即注册
楼主: zltzlt

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

[复制链接]
 楼主| 发表于 2020-4-14 17:54:50 | 显示全部楼层

解答错误

输入:[1, 2, 0, 3]
输出:3
预期结果:2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-14 17:55:33 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-14 17:56:02 | 显示全部楼层
lucky邪神 发表于 2020-4-14 11:17
不知道,我理解的对不对,分块,排序,重新组合后与原数组一样

解答错误

输入:[2, 0, 1]
输出:2
预期结果:1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-14 17:57:22 | 显示全部楼层
sunrise085 发表于 2020-4-14 13:57
修改好了,其实也就是把0在最开始的情况给漏掉了。求大佬看看运行效率

解答错误

输入:[2, 0, 1]
输出:0
预期结果:1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-14 17:59:53 | 显示全部楼层

解答错误

输入:[2, 0, 1]
输出:2
预期结果:1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-14 18:01:30 | 显示全部楼层
sunrise085 发表于 2020-4-14 13:57
修改好了,其实也就是把0在最开始的情况给漏掉了。求大佬看看运行效率

不可能分成 0 份
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-14 18:02:41 | 显示全部楼层

输入以下数据超时:

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

使用道具 举报

发表于 2020-4-14 20:18:04 | 显示全部楼层
zltzlt 发表于 2020-4-14 18:01
不可能分成 0 份

呃,之前对题目理解有偏差。。。。以为会有无法分的情况,就让函数返回0了。
这次可能就没问题了吧。
有问题也不再改了,有问题说明我对这道题的理解还是有偏差。
另外你发的那个txt中的列表,结果是1吗?
我用我的程序试了一下,结果是1
def fun374(list1):
    l=len(list1)-1
    result=1
    t=list1.index(0)
    while t<l:
        if t!=0:
            while max(list1[:t])>t:
                t=max(list1[:t])
        if t==l:
            break
        result+=1
        t=list1.index(t+1)
    return result

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

使用道具 举报

发表于 2020-4-14 20:20:03 | 显示全部楼层
zltzlt 发表于 2020-4-14 18:02
输入以下数据超时:

时间节约,完成!!!
def solve(arr:list,which:bool=False)->int:
    how = []
    l = len(arr)
    m = 0
    for i in range(l):
        m = max(m,arr[i])
        if m == i:how.append(i+1)
    res = len(how)
    if which:
        how.insert(0,0)
        for i in range(1,res):print(arr[how[i-1]:how[i]],end=',')
        else:print(arr[how[-2]:])
    return res

if __name__ == '__main__':
    print('示例1 输出:',solve([4,3,2,1,0]))
    print('示例2 输出:',solve([1,0,2,3,4],1))
    print('之前错的:',solve([0,1],1))
这个测试数据结果是 1
用时尺度是我感知不到的。我的感知是一瞬间就出结果了。

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-4-15 10:46:02 | 显示全部楼层
本帖最后由 岚冰1234 于 2020-4-15 10:48 编辑
import math
import copy
def splice_lst(lst,num):
    #列表里包含列表时,将其展开,
    def deep(lst):
        result = []
        for each in lst:
            if type(each) == list:
                #如果元素是列表,将其排序
                each.sort()
                result.extend(deep(each))
            else:
                result.append(each)
        return result
    #分块
    def chunk(lst,num):
        num = int(num)
        size = math.ceil(len(lst)/num)
        L = list(range(0,size))
        def ch(x):
            lst1 = lst[x*num:(x+1)*num]
            return lst1
        lst2 =list(map(ch, L))
        #深拷贝,实现讲分片的方式展示出来
        lst3 = copy.deepcopy(lst2)
        result = deep(lst2)
        print('数组分成',num,'元素一组:',lst3,',其输出结果是:',result)
    for each in range(1,num+1):
            chunk(lst,each)
a=[4, 3, 2, 1, 0]
print(splice_lst(a,4))


输出结果
数组分成 1 元素一组: [[4], [3], [2], [1], [0]] ,其输出结果是: [4, 3, 2, 1, 0]
数组分成 2 元素一组: [[4, 3], [2, 1], [0]] ,其输出结果是: [3, 4, 1, 2, 0]
数组分成 3 元素一组: [[4, 3, 2], [1, 0]] ,其输出结果是: [2, 3, 4, 0, 1]
数组分成 4 元素一组: [[4, 3, 2, 1], [0]] ,其输出结果是: [1, 2, 3, 4, 0]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-15 13:20:14 | 显示全部楼层
sunrise085 发表于 2020-4-14 20:18
呃,之前对题目理解有偏差。。。。以为会有无法分的情况,就让函数返回0了。
这次可能就没问题了吧。
...

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

使用道具 举报

 楼主| 发表于 2020-4-15 13:20:52 | 显示全部楼层
sunrise085 发表于 2020-4-14 20:18
呃,之前对题目理解有偏差。。。。以为会有无法分的情况,就让函数返回0了。
这次可能就没问题了吧。
...

解答错误

输入:[1, 5, 3, 0, 2, 8, 7, 6, 4]
输出:2
预期结果:1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-15 13:21:30 | 显示全部楼层
阴阳神万物主 发表于 2020-4-14 20:20
时间节约,完成!!!

这个测试数据结果是 1

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

使用道具 举报

 楼主| 发表于 2020-4-15 13:21:43 | 显示全部楼层
岚冰1234 发表于 2020-4-15 10:46
输出结果
数组分成 1 元素一组: [[4], [3], [2], [1], [0]] ,其输出结果是: [4, 3, 2, 1, 0]
数 ...

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

使用道具 举报

 楼主| 发表于 2020-4-15 13:23:08 | 显示全部楼层

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

使用道具 举报

发表于 2020-4-15 14:55:26 | 显示全部楼层
zltzlt 发表于 2020-4-15 13:20
解答错误

输入:[1, 5, 3, 0, 2, 8, 7, 6, 4]


呃,好吧。序列是从0开始的,max那里应该是t+1而不应该是t
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-15 17:24:55 | 显示全部楼层
sunrise085 发表于 2020-4-15 14:55
呃,好吧。序列是从0开始的,max那里应该是t+1而不应该是t

输入 [2, 0, 1] 有错……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-15 17:29:55 | 显示全部楼层
zltzlt 发表于 2020-4-15 17:24
输入 [2, 0, 1] 有错……

没错呀?
def fun374(list1):
    l=len(list1)-1
    result=1
    t=list1.index(0)
    while t<l:
        if t!=0:
            while max(list1[:t+1])>t:
                t=max(list1[:t+1])
        if t==l:
            break
        result+=1
        t=list1.index(t+1)
    return result
print(fun374([2,0,1]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-15 17:36:26 | 显示全部楼层


噢,搞错了,88 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-18 21:50:23 | 显示全部楼层
zltzlt 发表于 2020-4-14 17:56
解答错误

输入:[2, 0, 1]

将这个数组分割成几个 “块”,并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同

请问对题目重新理解是否正确:
1、按升序排序后的原数组相同指的是[0,1,.....,len(arr)]
2、分成的块进行排序,这个是指可以将块根据需要排序
3、块中的元素也进行排序(升序)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 00:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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