intbinarySearch(vector<int>& nums, int target){ if(nums.size() == 0) return-1;
int left = 0, right = nums.size() - 1; while(left <= right){ // Prevent (left + right) overflow int mid = left + (right - left) / 2; if(nums[mid] == target){ return mid; } elseif(nums[mid] < target) { left = mid + 1; } else { right = mid - 1; } }
// End Condition: left > right return-1; }
Template #1 is the most basic and elementary form of Binary Search. It is the standard Binary Search Template that most high schools or universities use when they first teach students computer science. Template #1 is used to search for an element or condition which can be determined by accessing a single index in the array.
Template II
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
intbinarySearch(vector<int>& nums, int target){ if(nums.size() == 0) return-1;
int left = 0, right = nums.size(); while(left < right){ // Prevent (left + right) overflow int mid = left + (right - left) / 2; if(nums[mid] == target){ return mid; } elseif(nums[mid] < target) { left = mid + 1; } else { right = mid; } }
// Post-processing: // End Condition: left == right if(left != nums.size() && nums[left] == target) return left; return-1; }
Template #2 is an advanced form of Binary Search. It is used to search for an element or condition which requires accessing the current index and its immediate right neighbor’s index in the array.
intbinarySearch(vector<int>& nums, int target){ if (nums.size() == 0) return-1;
int left = 0, right = nums.size() - 1; while (left + 1 < right){ // Prevent (left + right) overflow int mid = left + (right - left) / 2; if (nums[mid] == target) { return mid; } elseif (nums[mid] < target) { left = mid; } else { right = mid; } }
// Post-processing: // End Condition: left + 1 == right if(nums[left] == target) return left; if(nums[right] == target) return right; return-1; }
Template #3 is another unique form of Binary Search. It is used to search for an element or condition which requires accessing the current index and its immediate left and right neighbor’s index in the array.