对于列表b的每个元素,检查列表a中最接近的最大元素——对于巨大列表,对该代码的任何优化建议



函数:
对于列表b'的每个元素,检查

中列表a'如果找到元素,则从原始列表中删除该元素

所以下一个元素可以进行比较

列表a=[2,3,4],列表b=[0,0,7]=>2,3,-1

如果没有找到元素,则返回:-1

并最终打印-1 的计数

有任何建议来优化这个代码为巨大的列表

import sys
def next(arr, target): #method returns index of nex greater element or -1
start = 0
end = len(arr) - 1
ans = -1
while (start <= end):
mid = (start + end) // 2
if (arr[mid] <= target):
start = mid + 1
else:
ans = mid
end = mid - 1
return ans
def main():
q=list(map(int,sys.stdin.readline().split())) #list1
r=list(map(int,sys.stdin.readline().split())) #list2
q.sort()
r.sort()
var,count=0,0
for tst in r:
var=next(q,tst)
q.pop(var)
if var == -1:
count+=1
print(count)
main()

首先对两个列表进行排序。然后比较两个值。如果a[i]不比b[i]更粗糙,那么转到a的下一个元素。

a = [2,3,4]
b = [0,0,7]
a.sort()
b.sort()
c = [];
x = 0;
for i in range(len(b)):
while x < len(a):
if a[x] > b[i]:
c.append(a[x])
break;
x = x + 1;
if x >= len(a):
c.append(-1)
else:
x = x + 1;
for i in c:
print(i)

最新更新