Single Element in a Sorted Array

ㅋㅋ·2023년 2월 21일
0

알고리즘-leetcode

목록 보기
116/135

정렬된 정수형 벡터를 하나 받는데, 해당 벡터는 단 하나의 숫자를 제외하고 모두 두 개씩 존재한다.

여기서 단 하나만 존재하는 숫자를 찾는 것이 문제이며, O(log n)의 시간과 O(1) 공간을 만족 해야 한다.

class Solution {
public:
    int singleNonDuplicate(vector<int>& nums) {
        
        int head{0};
        int tail = nums.size() - 1;
        int body{0};
        while (head <= tail)
        {
            body = ((tail - head) >> 1) + head;

            if (body == 0)
            {
                return nums[body];
            }
            else if (nums[body] == nums[body + 1])
            {
                if (body % 2 == 0)
                {
                    head = body + 1;
                }
                else
                {
                    tail = body - 1;
                }
            }
            else if (nums[body] == nums[body - 1])
            {
                if (body % 2 == 0)
                {
                    tail = body - 1;
                }
                else
                {
                    head = body + 1;
                }
            }
            else
            {
                return nums[body];
            }
            
        }

        return nums[body + 1];
    }
};

0개의 댓글