/* if( nums[mid] == target && (mid == 0 or nums[mid-1]!=target)) in this piece of code ,if mid turns out to 0 then nums[mid-1] is not evaluated and this will not lead to run time error . this is called short circuit evaluation . Similary if(nums[mid] == target && (mid +1== nums.size() or nums[mid+1]!=target)) the code nums[mid+1] is not evaluated if mid+1 is already equal to nums.size() */ class Solution { public: vector searchRange(vector& nums, int target) { if(nums.size() == 0 ){ return {-1,-1}; } int left =0 ; int right = nums.size()-1; int start = -1 ; while(left <=right){ int mid = (left+right)/2; if( nums[mid] == target && (mid == 0 or nums[mid-1]!=target)){ start= mid; break; } else if(nums[mid]>=target){ right = mid-1; } else{ left = mid+1; } } int last = -1 ; left =0; right = nums.size() -1; while(left <= right){ int mid =(left+right)/2 ; if(nums[mid] == target && (mid +1== nums.size() or nums[mid+1]!=target)){ last = mid ; break; } else if(nums[mid] <= target){ left = mid+1; } else { right = mid -1 ; } } return {start,last}; } };