Problem Solving/?

[leetcode] 136. Single Number - C

Dev_en 2022. 3. 11. 23:51

문제

https://leetcode.com/problems/single-number/

 

Single Number - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

  • 분류 - ?
  • 난이도 - Easy
  • 제약
    • 1 <= nums.length <= 3 * 10^4
    • -3 * 10^4 <= nums[i] <= 3 * 10^4
    • Each element in the array appears twice except for one element which appears only once.
 
 

 


답안 코드 1

접근 방법

1) 첫 번째 요소부터 탐색해서

2) 배열의 요소들과 앞에서부터 비교한 후

3) 같은 값이 발견되면 다음 요소 탐색

4) 1~3 과정 반복

코드 및 실행 결과

Runtime: 1622 ms (5.05%), Memory Usage: 6.9 MB (99.85%)
int singleNumber(int* nums, int numsSize){
    int index=0;
    
    for(int i=0; i<numsSize; i++){
        if(nums[index] == nums[i] && index != i){
            index++;
            i=-1;
        }
    }
    return nums[index];
}

답안 코드 2

접근 방법

제약조건 -3 * 10^4 <= nums[i] <= 3 * 10^4 를 이용하여,

1) -3 * 10^4 <= index <= 3 * 10^4 인 counts 배열을 생성 및 0으로 초기화

2) nums 배열을 탐색하며 nums값에 해당하는 counts 배열의 값을 증가

3) counts값이 1인 nums값을 반환

코드 및 실행 결과

Runtime: 29 ms (44.20%), Memory Usage: 7.6 MB
int counts[60001];

int singleNumber(int* nums, int numsSize){
    int result=0;
    for(int i=0; i<60001; i++){
        counts[i] = 0;
    }
    for(int i=0; i<numsSize; i++){
        counts[nums[i]+30000]++;
    }
    for(int i=0; i<numsSize; i++){
        if(counts[nums[i]+30000] == 1) result = nums[i]; 
    }
    
    return result;
}

답안 코드 3 - XOR

접근 방법

nums의 요소들을 앞에서부터 XOR 연산을 하면, 최종 결과값으로 single number가 나옴

코드 및 실행 결과

Runtime: 20 ms (75.84%), Memory Usage: 7.5 MB (11.55%)
int singleNumber(int* nums, int numsSize){
    for(int i=1; i<numsSize; i++) nums[0] ^= nums[i];
    return nums[0];
}