功能:
为“列表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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句