Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 데이터베이스에 완전히 저장하기 위해 로그를 자르기 위해 가장 큰 크기를 찾는 프로그램

<시간/>

로그라는 숫자 목록과 다른 값 제한이 있다고 가정합니다. logs[i]의 각 요소는 i번째 사용자가 생성한 로그의 크기를 나타냅니다. 그리고 limit은 데이터베이스에 저장할 수 있는 총 로그 크기를 나타냅니다. 로그의 모든 로그를 최대 크기 x로 자르고 왼쪽 로그 크기의 합이 최대가 되도록 가장 큰 x를 찾아야 합니다. 잘라낼 로그가 없으면 가장 큰 로그 크기를 반환하기만 하면 됩니다.

따라서 입력이 로그 =[500, 200, 10000, 500, 4000] limit =3000과 같으면 출력은 900이 됩니다. 로그를 900으로 자르기 때문에 [500, 200, 900, 500]을 얻을 수 있습니다. , 900] 이제 합계는 3000입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • lo :=0
  • hi :=1 + 최대 로그 수
  • lo + 1 <안녕하세요
    • mi :=lo + (hi - lo)/2의 바닥
    • 목록에 있는 모든 요소의 합이 (로그의 각 로그에 대한 mi 및 log의 최소값) <=limit, then
      • 로:=미
    • 그렇지 않으면
      • 안녕하세요 :=미
  • 귀환

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def solve(logs, limit):
   lo, hi = 0, max(logs) + 1
   while lo + 1 < hi:
      mi = lo + (hi - lo) // 2
      if sum(min(mi, log) for log in logs) <= limit:
         lo = mi
      else:
         hi = mi
   return lo

logs = [500, 200, 10000, 500, 4000]
limit = 3000
print(solve(logs, limit))

입력

[500, 200, 10000, 500, 4000], 3000

출력

900