바 오즈 Leetcode 솔루션 (201) : 비트 단위와 숫자의 범위

문제 설명 

주어진 범위 [m, n]은 0 <= m <= N <= 2147483647에서, 비트 단위로 돌아가서,이 범위에있는 모든 숫자 포괄적.

예 1 :

입력 : [5,7]
 출력 : 4

예 2 :

입력 : [0,1]
 출력 : 0

 

문제 링크

 

비디오 자습서

여기 상세 비디오 자습서를 찾을 수 있습니다

 

생각 프로세스

우리가 수를 계속 증가입니다 작업에서 수행하고 AND를하는 것처럼 일반적으로 우리는 단지 구현합니다. 그것은 여전히 ​​OJ를 전달합니다, 단지 상황을 오버플로 관심을 지불 할 필요 (사용하여 긴 문제를 해결할 것입니다)

 

우리는 그것을 선형 이상을 해결할 수 이제 우리는 자신을 추진하고있다. 이진 선형보다 빠릅니다 / 로그인합니다. 오른쪽 부분은 0으로 끝낼 때문에 - 아이디어는 m 및 n은, 나중에 교대 N (공통 길이 자리 숫자의 총 수)의 공통 왼쪽 비트를 찾는 것이다.

 

예를 들어, 4 내지 7, thte 공통 왼쪽 부분은 1, 범위 값이 될 것이다 (N 배의 시프트를 남겨) 100

  • (1) 00
  • (1) 01
  • 1 10
  • (1) (11)

솔루션

 

리니어 솔루션

 

1 개  공용  INT rangeBitwiseAnd ( INT의 m, INT의 N) {
 2      // 넘침 방지 
3       입술 용 = m을;
(4)  
(5)      에 대한 ( 길이 I = (  ) m + 1] = 난 (< 길이 ) N; 내가 ++ ) {
 6          입술 = 입술 및 I;
7          경우 (입술 == 0) 복귀 0 ;
8      }
 9  
10       ( INT ) 입술;
11 }

 

시간 복잡도 : O (N) 본질적 N - m

공간 복잡성은 : O (1) 여분의 공간이 필요하지 않습니다

 

대수 솔루션

1  공용  INT rangeBitwiseAnd ( INT의 m, INT의 N) {
 2      경우 (N == m) {
 3          N;
4      }
 5      INT의 자리 = 0 ;
6      동안 (! m = N) {
 7          m = >> 1 ;
(8)          N은 >> = 1 ;
9          자리 ++ ;
10      }
 11  
12      복귀 m << 자리;
13 }

 

 

시간 복잡도 : O (LGN) 우리는 N 2 (왼쪽 시프트)을 나누어 계속하기 때문에

공간 복잡성은 : O (1) 여분의 공간이 필요하지 않습니다

 

참조

추천

출처www.cnblogs.com/baozitraining/p/11614656.html