[검지Offer] 40, 수조에 한 번만 나오는 숫자
하나의 정형수조에서 두 개의 숫자를 제외하고 다른 숫자는 모두 두 번 나타났다.프로그램을 써서 이 두 개의 한 번만 나오는 숫자를 찾아내세요.
문제풀이1:HashMap의 방법으로 하다
1 import java.util.HashMap;
2 public class Solution {
3 public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
4 // map, map , key
5 HashMap map = new HashMap();
6 for(int i=0; i < array.length; i++){
7 if(map.containsKey(array[i]))
8 map.put(array[i],2);
9 else
10 map.put(array[i],1);
11 }
12 // count
13 int count = 0;
14 for(int i=0; i < array.length; i++){
15 if(map.get(array[i]) == 1){
16 if(count == 0){
17 num1[0] = array[i];
18 count++;
19 }else
20 num2[0] = array[i];
21 }
22 }
23 }
24 }
문제2: 비트 연산 방법으로 하다
비트 연산에서 이차 또는 성질: 두 개의 같은 숫자가 이차 또는 =0, 한 수와 0이 이차 또는 그 자체이다.
1 /*
2 , , , ,
。 , ( AB) 。
, A、B , 1, A B 。
1 , 3 , , 3 1。
, , , , 。
, , 。
3 */
4 public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
5 int xor1 = 0;
6 for(int i=0; i < array.length; i++)
7 xor1 = xor1^array[i];
8 // xor1 ,
9 int index = 1;
10 while((index & xor1)==0)
11 index = index <<1;// 1
12 int result1 = 0;
13 int result2 = 0;
14 for(int i=0; i < array.length; i++){
15 if((index & array[i]) == 0)
16 result1 = result1^array[i];
17 else
18 result2 = result2^array[i];
19 }
20 num1[0] = result1;
21 num2[0] = result2;
22 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.