LeetCode-365 물 및 용기 문제점

제목 설명

당신은 용량의 두 주전자 주어진  X 및  Y  리터. 가능한 물 공급의 무한한 양이있다. 당신은 정확하게 측정 할 수 있는지 여부를 결정해야  Z  이 두 주전자를 사용하여 리터.

경우  의 Z  리터의 물을 측정, 당신은 있어야합니다  Z  하나에 포함 리터의 물 또는 말까지 모두 버킷.

작업이 허용 :

  • 완전히 물을 주전자 중 하나를 입력합니다.
  • 주전자 중 하나를 비 웁니다.
  • 다른 주전자까지 서로에 한 주전자에서 물을 부어 완전히 꽉 찼거나 첫 번째 주전자 자체는 비어 있습니다.

 

효과에 따라

두 가지 크기의 x 및 y는 각각 리터의 케틀 무제한는 용기에 물을 충전하고, 용기 내의 물이 Z를 추가 두 구현 될 수 있는지 여부를 케틀은 서로 둘 사이 부어있다.

 

E1

입력 : X = (Y) 3 = 5, Z = 4 
출력 트루

E2

입력 : X = 2, Y = 6, Z = 5 
출력 : FALSE

 

문제 해결 아이디어

LeetCode의 @의 lblbxuxu2의 생각에 따르면, v를, 현재 획득 물의 총량을 나타내는

  V + = Y를, V는 <x, 할 수있는 의미있는 작업이 때문에, 예를 채울 때

  =의 X - V : V는> X, 할 수있는 감지 동작을 따라서 X가 비어있는 경우

만족 여부는 순환 V의 존재 = Z를 결정한다.

 

복잡도 분석

시간 복잡도 : O (N)

공간 복잡도 : O (1)

 

코드

클래스 해결 {
 공개 :
     BOOL canMeasureWater ( INT (X), INT의 Y, INT의 Z) {
         IF (X == Y + Z)
              에 해당하는 ,
         IF (X + Y < Z)
              은 false ;
         // 다음, X가 Y보다 작 으면 두 교환식 디지털 
        IF (X < Y) {
             INT의 TMP = X, 
            X = Y, 
            Y가 = TMP; 
        } 
        
        INT의 V = 0 ;
        하지만 ( 1 ) {
             경우 (V < X) 
                V + = Y;
            다른 
                V - =의 X;
            경우 (V == Z)이
                 반환  ;
            경우 (브이 == 0 )
                 돌려  거짓 ; 
        } 
    } 
};

 

추천

출처www.cnblogs.com/heyn1/p/11244169.html