проверять ближайший наибольший элемент в списке a для каждого элемента списка b любые предложения по оптимизации этого кода для огромных списков - PullRequest
1 голос
/ 03 апреля 2020

Функция:
Проверка на наличие ближайшего наибольшего элемента в 'list a' для каждого элемента 'list b'

если элемент найден, удалите этот элемент из исходного списка

, чтобы можно было сравнить следующий элемент

list 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()

1 Ответ

0 голосов
/ 03 апреля 2020

сортировать два списка в первую очередь. затем сравните два значения. если a [i] не больше b [i], то go следующий элемент 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...