leetcode

[leetcode 35][c++] search Insert Position

DanGEE 2022. 2. 23. 23:26

문제 : 

 

 

알고있어야 할 점. 

"return low" 한다. 그 이유는. 

배열에 [1,5] 가 들어있을경우, 

high = low +1 이고, mid = low 이다.

이걸 아래와 같이 나눠서 생각하면 

각 변수의 인덱스는 l = 0, h = 1, m = 0 이다. 

case 1) target = 0 이면,
          target < nums[mid]이고, 따라서 high = mid-1이고, h=-1 이된다. 
          [1,   5]

      ↑  ↑   

      h    l
        

case 2) target = 4 이면
          target > nums[mid] 면, low=mid+1 이므로, 1회 진행시 h,l,m이 같은 값을 가르킨다. 
          [1,   5]

              ↑↑↑ 

               h l m

         다시 target이 5보다 작으므로, h=mid-1이고

        [1,   5]

        ↑   ↑

        h     l  이 된다. 

case 3) target = 6 이면

        target > nums[mid] 면, low=mid+1 이므로, 1회 진행시 h,l,m이 같은 값을 가르킨다. 
          [1,   5]

              ↑↑↑ 

               h l m

        이때, case2와 다르게, target 이 5보다 크므로, l=mid+1이다. 

 

 

1,2,3 case확인시 low를 반환해야 삽입하려는 위치가 나옴을 알 수 있다. 

따라서 데이터를 찾지 못했다면, low를 반환한다. 

 

 

출처 :  leetcode priyarm_vd 님

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
     
        int low = 0, high = nums.size()-1;
        
        while(low<=high){
            int mid = low + (high-low)/2;
            
            if(nums[mid] == target) return mid;
            
            else if(nums[mid] > target) high = mid-1;
            
            else low = mid+1;
        }
        return low;
    }
};