鱼C论坛

 找回密码
 立即注册
查看: 6818|回复: 44

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

[复制链接]
发表于 2019-12-12 22:12:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zltzlt 于 2019-12-13 19:38 编辑

今天的题目:


给定一个整数数组 array 以及一个查询列表 queries。将 array 中小于每一个查询列表中的整数的元素数量添加进列表里。返回最终的列表。

示例 1:

输入:array = [1, 2, 7, 8, 5], queries = [1, 8, 5]
输出:[0, 4, 2]
示例 2:

输入:array = [3, 4, 5, 8], queries = [2, 4]
输出:[0, 1]


欢迎大家一起答题!
最佳答案
2019-12-13 00:37:06
  1. def solve(array,query):
  2.     result = []
  3.     count = 0
  4.     for item in query:
  5.         for num in array:
  6.             if num < item:
  7.                 count += 1
  8.             else:
  9.                 pass
  10.         result.append(count)
  11.         count = 0
  12.     return result

  13. if __name__ == '__main__':
  14.     print('自测1:输入:array = [1, 2, 7, 8, 5], queries = [1, 8, 5];输出:',solve([1,2,7,8,5],[1,8,5]))
  15.     print('自测2:输入:array =[3, 4, 5, 8], queries = [2, 4];输出:', solve([3,4,5,8], [2,4]))
复制代码

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2019-12-12 22:19:23 | 显示全部楼层
  1. def solve(array, queries):
  2.     array.sort()
  3.     def count(num):
  4.         for i in range(len(array)):
  5.             if array[i] >= num:
  6.                 break
  7.         return i
  8.     return list(map(count, queries))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2019-12-12 23:09:15 | 显示全部楼层
本帖最后由 流羽星 于 2019-12-12 23:12 编辑
  1. def a(array,queries):
  2.     s=[]
  3.     for i in queries:
  4.         n=0
  5.         for o in array:
  6.             if o<i:
  7.                 n+=1
  8.         s.append(n)
  9.     print(s)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2019-12-12 23:14:22 | 显示全部楼层
本帖最后由 零0℃度 于 2019-12-12 23:16 编辑
  1. def f289(array,queries):
  2.     res = []
  3.     for i in queries:
  4.         res.append(len([x for x in array if x<i]))
  5.     return res
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2019-12-13 00:04:50 | 显示全部楼层
本帖最后由 TJBEST 于 2019-12-13 18:07 编辑
  1. def fun(array,queries):
  2.     givenList = sorted(array)
  3.     checkList = sorted(set(queries))
  4.     checkNumList = []
  5.     for eachNum in checkList:
  6.         if eachNum <= givenList[0]:
  7.             checkNumList.append(0)
  8.         elif eachNum > givenList[len(givenList)-1]:
  9.             checkNumList.append(len(givenList))
  10.         else:
  11.             if checkNumList==[]:
  12.                 indexA = 0
  13.             elif checkNumList[len(checkNumList)-1]==0:
  14.                 indexA = 0
  15.             else:
  16.                 indexA = checkNumList[len(checkNumList)-1]-1
  17.                
  18.             while True:
  19.                 if givenList[indexA]<eachNum and givenList[indexA+1]>=eachNum:
  20.                     break
  21.                 else:
  22.                     indexA = indexA + 1
  23.             checkNumList.append(indexA+1)
  24.     newMap = dict(zip(checkList,checkNumList))
  25.     result = []
  26.     for eachRe in queries:
  27.          result.append(newMap[eachRe])
  28.     return result
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-13 00:37:06 | 显示全部楼层    本楼为最佳答案   
  1. def solve(array,query):
  2.     result = []
  3.     count = 0
  4.     for item in query:
  5.         for num in array:
  6.             if num < item:
  7.                 count += 1
  8.             else:
  9.                 pass
  10.         result.append(count)
  11.         count = 0
  12.     return result

  13. if __name__ == '__main__':
  14.     print('自测1:输入:array = [1, 2, 7, 8, 5], queries = [1, 8, 5];输出:',solve([1,2,7,8,5],[1,8,5]))
  15.     print('自测2:输入:array =[3, 4, 5, 8], queries = [2, 4];输出:', solve([3,4,5,8], [2,4]))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2019-12-13 01:05:01 | 显示全部楼层
  1. def querylist(array,queries):
  2.     temp=list(range(len(queries)))

  3.     array.sort()
  4.     temp.sort(key=lambda i:queries[i])

  5.     k=0
  6.     for i in temp:
  7.         while (k<len(array) and array[k]<queries[i]):
  8.             k+=1
  9.         queries[i]=k
  10.     return queries
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2019-12-13 01:33:32 | 显示全部楼层
  1. '''
  2. 给定一个整数数组 array 以及一个查询列表 query。将 array 中小于每一个查询列表中的整数的元素数量添加进列表里。返回最终的列表。

  3. 输入:array = [1, 2, 7, 8, 5], queries = [1, 8, 5]
  4. 输出:[0, 4, 2]

  5. 输入:array =[3, 4, 5, 8], queries = [2, 4]
  6. 输出:[0, 1]
  7. '''
  8. def fun():
  9.         array = [1, 2, 7, 8, 5]
  10.         queries = [1, 8, 5]
  11.         l = []
  12.         ln = []

  13.         for i in queries:
  14.                 ln.append(len(list(filter(lambda x:i-x>0,array))))
  15.         return ln

  16. f = fun()
  17. print(f)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2019-12-13 04:29:26 | 显示全部楼层
本帖最后由 hrp 于 2019-12-13 16:01 编辑
  1. def func289(array, queries):
  2.     result = []; array.sort()
  3.     for i in queries:
  4.         for j in array:
  5.             if j >= i:
  6.                 break
  7.         result.append(array.index(j))
  8.     return result
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2019-12-13 09:23:54 | 显示全部楼层
  1. def fun289(array,query):
  2.     return [len([j for j in array if j<i]) for i in query]
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2019-12-13 09:32:28 | 显示全部楼层
本帖最后由 danteer 于 2019-12-13 20:12 编辑
  1. def fun(array,queries):
  2.     if len(queries) == 0:
  3.         return []
  4.     array.sort()
  5.     que = queries.copy()
  6.     dict1 = {}
  7.     queries.sort()
  8.     result = []
  9.     for each in que:
  10.         dict1[each] = len(array)
  11.     course = 0
  12.     i = 0
  13.     while i < len(array):
  14.         if array[i] >= queries[course]:
  15.             dict1[queries[course]] = i
  16.             if course == len(queries) - 1:
  17.                 break
  18.             else:
  19.                 course += 1
  20.         else:
  21.             i += 1
  22.     for each in que:
  23.         result.append(dict1[each])
  24.     return result
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2019-12-13 12:37:14 | 显示全部楼层
目前,我唯一好奇的是:
给定一个整数数组 array 以及一个查询列表 query。
为什么
输入:array = [1, 2, 7, 8, 5], queries = [1, 8, 5]
怎么突然来这么一个复数形式?
变量名不一样是会调用函数失败的。


  1. def solve(array:'整数数组',query:'查询列表')->'最终列表':
  2.     le = len(query)
  3.     res = [0]*le
  4.     for each in array:
  5.         for i in range(le):
  6.             if each < query[i]:
  7.                 res[i] += 1
  8.     return res

  9. if __name__ == '__main__':
  10.     print('示例1 输出:',solve([1,2,7,8,5],[1,8,5]))
  11.     print('示例2 输出:',solve([3,4,5,8],[2,4]))
复制代码

时间复杂度应该为O(n^2)

评分

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

查看全部评分

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

使用道具 举报

发表于 2019-12-13 16:59:06 | 显示全部楼层
  1. def fun(array:list,query:list):
  2.     array.sort()
  3.     result = []
  4.     array = array+array[:-2:-1]
  5.     for i in query:
  6.         if array == []:
  7.             result.append(0)
  8.         else:
  9.             n,m = 0, len(array)
  10.             while (m - n) > 1:
  11.                 if i <= array[int((n+m)/2)-1]:
  12.                     m = int((n+m)/2)
  13.                 else :
  14.                     n = int((n+m)/2)
  15.             result.append(n)
  16.     return result
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2019-12-13 17:55:18 | 显示全部楼层
  1. def fun288(n):
  2.     length=len(n)
  3.     count=0
  4.     for a in range(length):
  5.         b=a+1
  6.         while b<=length-2:
  7.             c=b+1
  8.             while c<=length-1:
  9.                 if n[a]+n[b]>n[c]:
  10.                     count+=1
  11.                 c+=1
  12.             b+=1
  13.     return count
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-13 18:53:00 | 显示全部楼层
  1. def fun(array, queries):
  2.     result = []
  3.     for i in queries:
  4.         arr = array[:]
  5.         arr.append(i)
  6.         arr.sort()
  7.         result.append(arr.index(i))
  8.     return result
复制代码

评分

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

查看全部评分

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

使用道具 举报

 楼主| 发表于 2019-12-13 19:31:01 | 显示全部楼层

当 array 为空列表时报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-13 19:32:21 | 显示全部楼层

输入大数据超时
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-13 19:33:05 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-13 19:33:44 | 显示全部楼层

当 array 为空列表时报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-13 19:33:46 | 显示全部楼层
  1. def cal(array, queries):
  2.     results = []

  3.     for each in queries:
  4.         count = 0
  5.         for each1 in array:
  6.             if each > each1:
  7.                 count += 1
  8.         results.append(count)

  9.     print(results)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-14 00:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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