정수 하 나 를 2 진법 으로 바 꾼 후, 몇 개의 1 이 있 습 니까?
1030 단어 알고리즘
사고 1: int temp = 1 부터 매번 순환 비교 가 number 와 같 는 지, 같 지 않 으 면 temp 을 배로 증가 시 킵 니 다 (temp = temp * 2). 이렇게 순환 비교 하여 같 을 때 까지 합 니 다.
이 방법의 시간 복잡 도 는 O (LogN) 이다.
사고 2: 찾 는 것 은 2 의 곱셈 의 수, 규칙 이다.
N N-1
2 -> 10b 1b
4 -> 100b 11b
8 -> 1000b 111b
16 -> 10000b 1111b
최고 위 는 모두 1 이다.
그래서 N & (N - 1) = 0.시간 복잡 도 는 O (1) 이다.
그렇다면 정수 하 나 를 2 진법 으로 바 꾼 후 1 이 몇 개 있 습 니까?
물론 비트 연산 과 도 관련 이 있 을 것 이다.
하나의 숫자 N, N & 1 은 0 이거 나 1 이다.
그래서 결과 가 1 일 때 최 하위 가 1 이라는 뜻 이다.0 일 때 는 최 하위 가 1 이 아니 라 는 뜻 이다.
따라서 매번 & 후, 한 명 씩 오른쪽으로 이동 하고, 다시 &, N 오른쪽으로 0 으로 이동 할 때 까지 순환 을 끝 냅 니 다.
NSInteger value = 111;
NSInteger count = 0;
while (value) {
NSLog(@"%ld",value&1);
int x = value&1;
if (x == 1) count++;
value = value>>1;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.