新手·ing 发表于 2019-7-21 19:19:10

Python:每日一题 225

别别别说我鸽,我是真没题了...
今天的每日一题,需要想一想,而且不能超时...
根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。
例如,给定一个列表 temperatures = ,你的输出应该是 。
提示:气温 列表长度的范围是 。每个气温的值的均为华氏度,都是在 范围内的整数。

这道题,我可能是做对了,但是超时了...

所以我后面再看看,看看能不能改进改进,超时版:
**** Hidden Message *****



zsc198945 发表于 2019-7-22 00:03:32

题目比较晦涩难懂

塔利班 发表于 2019-7-22 09:10:00

本帖最后由 塔利班 于 2019-7-22 09:17 编辑

def mid(a,L):
    for i,e in enumerate(L):
      if e>a:
            return i+1
    return 0
def fun225(x):
    res=[]
    for i,e in enumerate(x):
      res.append(mid(e,x))
    print(res)
fun225()
我开始想的复杂度应该差不多应该也是O(N2),有没有O(N)的呢。。

flamer 发表于 2019-7-22 10:11:12

看一下隐藏内容,题目没怎么看懂

fan1993423 发表于 2019-7-22 10:25:01

哦,我懂了,最先没看明白是什么意思

fan1993423 发表于 2019-7-22 10:32:19

楼主说的超时指的什么,就是这个列表的运行结果时间有限制还是什么?

fan1993423 发表于 2019-7-22 10:37:18

我给大家解释一下楼主的意思,楼主说的就是有一个列表 ,然后从73开始找到第一个大于73的间隔数,所以74就找到了,中间间隔1,然后依次类推。所以结果就是,所以气温不气温的全是浮云,只是增加迷惑项 @flamer @zsc198945

新手·ing 发表于 2019-7-22 12:13:20

fan1993423 发表于 2019-7-22 10:32
楼主说的超时指的什么,就是这个列表的运行结果时间有限制还是什么?

有时间限制

fan1993423 发表于 2019-7-22 13:41:07

塔利班 发表于 2019-7-22 09:10
我开始想的复杂度应该差不多应该也是O(N2),有没有O(N)的呢。。

科普一下复杂度是什么意思

晓屁屁 发表于 2019-7-22 14:22:05

temperatures =
i = 1 #记录几位
list1 = []
for no, each in enumerate(temperatures):
    try:
      if each < temperatures:
            list1.append(i)
            i = 1
      while each >= temperatures:
            i += 1
            no += 1
            if each < temperatures:
                list1.append(i)
                i = 1
                break
    except:
      list1.append(0)
print(list1)

新手·ing 发表于 2019-7-22 15:15:50

晓屁屁 发表于 2019-7-22 14:22


执行结果:解答错误
输入:

输出

预期结果

新手·ing 发表于 2019-7-22 15:19:23

塔利班 发表于 2019-7-22 09:10
我开始想的复杂度应该差不多应该也是O(N2),有没有O(N)的呢。。

我再想想

晓屁屁 发表于 2019-7-22 15:33:50

新手·ing 发表于 2019-7-22 15:15
执行结果:解答错误
输入:



我改一下

晓屁屁 发表于 2019-7-22 15:36:00

新手·ing 发表于 2019-7-22 15:15
执行结果:解答错误
输入:



temperatures =
i = 1 #记录几位
list1 = []
for no, each in enumerate(temperatures):
    try:
      if each < temperatures:
            list1.append(i)
            i = 1
      while each >= temperatures:
            i += 1
            no += 1
            if each < temperatures:
                list1.append(i)
                i = 1
                break
    except:
      list1.append(0)
      i = 1
print(list1)

计数器,重置一下就好了

漫步云端〃 发表于 2019-7-22 15:39:15

fan1993423 发表于 2019-7-22 13:41
科普一下复杂度是什么意思

就是实现这个逻辑的工作量。参考彩票,如果从33个数中选一个号码,那么中奖概率是1/33.但是如果从33个号码中选取6个再加上篮球号码,概率就是1/1770万。就是实现这个逻辑组合的工作量。

新手·ing 发表于 2019-7-22 15:44:43

晓屁屁 发表于 2019-7-22 15:36
计数器,重置一下就好了

喜提超时

晓屁屁 发表于 2019-7-22 15:45:17

新手·ing 发表于 2019-7-22 15:44
喜提超时

{:5_99:}啊哈哈

新手·ing 发表于 2019-7-22 15:49:29

晓屁屁 发表于 2019-7-22 15:45
啊哈哈

看看,能不能再改进一下吧

fallout.nj 发表于 2019-7-22 15:55:11

本帖最后由 fallout.nj 于 2019-7-22 16:27 编辑

不知道对不对,我知道20分钟做出答案肯定是超时了。
def func(temperatures=[]):
    result = []
    lens = len(temperatures)
    for i in range(0, lens):
      for j in range(i, lens):
            if temperatures - temperatures < 0:
                result.append(j - i)
                break
      if len(result) < i+1:
            result.append(0)

    return result




修改一下,之前的有逻辑错误,现在正确了。运行超时这里我记得有个库,可以提高运行效率的

新手·ing 发表于 2019-7-22 15:56:30

fallout.nj 发表于 2019-7-22 15:55
不知道对不对,我知道20分钟做出答案肯定是超时了。

和我想的一样,所以超时了
页: [1] 2 3 4 5
查看完整版本: Python:每日一题 225