鱼C论坛

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

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

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

解答错误

输入:[1, 2, 0, 3]
输出:3
预期结果:2
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-14 17:55:33 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

解答错误

输入:[2, 0, 1]
输出:2
预期结果:1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

解答错误

输入:[2, 0, 1]
输出:0
预期结果:1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

解答错误

输入:[2, 0, 1]
输出:2
预期结果:1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

不可能分成 0 份
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

输入以下数据超时:

testcase.zip (73.62 KB, 下载次数: 2)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

  14. if __name__ == '__main__':
  15.     print('示例1 输出:',solve([4,3,2,1,0]))
  16.     print('示例2 输出:',solve([1,0,2,3,4],1))
  17.     print('之前错的:',solve([0,1],1))
复制代码

这个测试数据结果是 1
用时尺度是我感知不到的。我的感知是一瞬间就出结果了。

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-15 10:46:02 | 显示全部楼层
本帖最后由 岚冰1234 于 2020-4-15 10:48 编辑
  1. import math
  2. import copy
  3. def splice_lst(lst,num):
  4.     #列表里包含列表时,将其展开,
  5.     def deep(lst):
  6.         result = []
  7.         for each in lst:
  8.             if type(each) == list:
  9.                 #如果元素是列表,将其排序
  10.                 each.sort()
  11.                 result.extend(deep(each))
  12.             else:
  13.                 result.append(each)
  14.         return result
  15.     #分块
  16.     def chunk(lst,num):
  17.         num = int(num)
  18.         size = math.ceil(len(lst)/num)
  19.         L = list(range(0,size))
  20.         def ch(x):
  21.             lst1 = lst[x*num:(x+1)*num]
  22.             return lst1
  23.         lst2 =list(map(ch, L))
  24.         #深拷贝,实现讲分片的方式展示出来
  25.         lst3 = copy.deepcopy(lst2)
  26.         result = deep(lst2)
  27.         print('数组分成',num,'元素一组:',lst3,',其输出结果是:',result)
  28.     for each in range(1,num+1):
  29.             chunk(lst,each)
  30. a=[4, 3, 2, 1, 0]
  31. 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]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

是的,结果是 1
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

这个测试数据结果是 1

88 ms
小甲鱼最新课程 -> https://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]
数 ...

貌似来晚了呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

83 ms
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

输入 [2, 0, 1] 有错……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

没错呀?
  1. def fun374(list1):
  2.     l=len(list1)-1
  3.     result=1
  4.     t=list1.index(0)
  5.     while t<l:
  6.         if t!=0:
  7.             while max(list1[:t+1])>t:
  8.                 t=max(list1[:t+1])
  9.         if t==l:
  10.             break
  11.         result+=1
  12.         t=list1.index(t+1)
  13.     return result
  14. print(fun374([2,0,1]))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


噢,搞错了,88 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

输入:[2, 0, 1]

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-19 17:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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