我一直在比较两个列表,找出有多少元素是<= list1 (list2 <= list1),并将结果放入new_list。
下面是测试用例:
测试用例1:
list1 = [1, 4, 2, 4]
list2 = [3, 5]
Output: [2, 4]解释:
。
测试用例2:
list1 = [1, 2, 3]
list2 = [2, 4]
Output: [2, 3]解释:
。
我想用两个指针进行求解,在list1中放置第一个指针,在list2中放置第二个指针,然后比较两个列表中的每个元素,每次看到list2中的元素小于list1中的元素时,就增加一个计数。这个实现对我来说有点挑战性,我确定它是否起作用。
我在这里写的是:
def counts(list1, list2):
new_list = []
count = 0
a = list1[0]
b = list2[0]
i, j = 1, 1
while a or b:
if a <= b:
count += 1
new_list.append(a[i])
i += 1
return new_list发布于 2022-04-20 13:05:43
最简单的方法是:
import numpy as np
[(np.array(list1)<=l2).sum() for l2 in list2]但如果你需要更有效的解决方案,就让我知道
发布于 2022-04-20 13:53:45
您可以对输入列表进行排序。然后进行二进制搜索(从std库中提取bisect.bisect_right),得到list2中值在list1中的插入位置。该职位最终会告诉您,有多少值小于list2中项的值。
from bisect import bisect_right # For binary search.
srt_l1 = sorted(list1) # NlogN
srt_l2 = sorted(list2) # MlogM
out = [bisect_right(srt_l1, val) for val in srt_l2] # MlogN这给O(NlogN + MlogM)带来了时间复杂性,增加了N+M的空间(尽管您可以使用list.sort进行就地排序)。以上建议的答案具有O(N*M)的时间复杂性。
https://stackoverflow.com/questions/71940117
复制相似问题