|
82 | 82 | }, |
83 | 83 | { |
84 | 84 | "title": "Binary Search", |
85 | | - "description": "Used for sorted arrays, search space problems.", |
| 85 | + "description": "Used for sorted arrays and search space problems. Three main variants: (1) Standard Binary Search - finds exact target; (2) Lower Bound - finds first position where arr[i] >= target (leftmost insertion point); (3) Upper Bound - finds first position where arr[i] > target (rightmost insertion point). Lower/Upper bounds are useful for finding insert positions, range queries, and 'at least/at most' problems.", |
86 | 86 | "templates": { |
87 | | - "python": "def binary_search(arr, target):\n left, right = 0, len(arr) - 1\n while left <= right:\n mid = (left + right) // 2\n if arr[mid] == target:\n return mid\n elif arr[mid] < target:\n left = mid + 1\n else:\n right = mid - 1\n return -1", |
88 | | - "javascript": "function binarySearch(arr, target) {\n let left = 0, right = arr.length - 1;\n while (left <= right) {\n const mid = Math.floor((left + right) / 2);\n if (arr[mid] === target) {\n return mid;\n } else if (arr[mid] < target) {\n left = mid + 1;\n } else {\n right = mid - 1;\n }\n }\n return -1;\n}", |
89 | | - "java": "public int binarySearch(int[] arr, int target) {\n int left = 0, right = arr.length - 1;\n while (left <= right) {\n int mid = left + (right - left) / 2;\n if (arr[mid] == target) {\n return mid;\n } else if (arr[mid] < target) {\n left = mid + 1;\n } else {\n right = mid - 1;\n }\n }\n return -1;\n}", |
90 | | - "go": "func binarySearch(arr []int, target int) int {\n left, right := 0, len(arr)-1\n for left <= right {\n mid := left + (right-left)/2\n if arr[mid] == target {\n return mid\n } else if arr[mid] < target {\n left = mid + 1\n } else {\n right = mid - 1\n }\n }\n return -1\n}" |
| 87 | + "python": "# ---------------------------\n# Version 1: Standard Binary Search (find exact target)\n# ---------------------------\ndef binary_search(arr, target):\n left, right = 0, len(arr) - 1\n while left <= right:\n mid = (left + right) // 2\n if arr[mid] == target:\n return mid\n elif arr[mid] < target:\n left = mid + 1\n else:\n right = mid - 1\n return -1\n\n\n# ---------------------------\n# Version 2: Lower Bound (first position >= target)\n# ---------------------------\ndef lower_bound(arr, target):\n left, right = 0, len(arr)\n while left < right:\n mid = (left + right) // 2\n if arr[mid] < target:\n left = mid + 1\n else:\n right = mid\n return left # returns len(arr) if all elements < target\n\n\n# ---------------------------\n# Version 3: Upper Bound (first position > target)\n# ---------------------------\ndef upper_bound(arr, target):\n left, right = 0, len(arr)\n while left < right:\n mid = (left + right) // 2\n if arr[mid] <= target:\n left = mid + 1\n else:\n right = mid\n return left # returns len(arr) if all elements <= target", |
| 88 | + "javascript": "// ---------------------------\n// Version 1: Standard Binary Search (find exact target)\n// ---------------------------\nfunction binarySearch(arr, target) {\n let left = 0, right = arr.length - 1;\n while (left <= right) {\n const mid = Math.floor((left + right) / 2);\n if (arr[mid] === target) {\n return mid;\n } else if (arr[mid] < target) {\n left = mid + 1;\n } else {\n right = mid - 1;\n }\n }\n return -1;\n}\n\n\n// ---------------------------\n// Version 2: Lower Bound (first position >= target)\n// ---------------------------\nfunction lowerBound(arr, target) {\n let left = 0, right = arr.length;\n while (left < right) {\n const mid = Math.floor((left + right) / 2);\n if (arr[mid] < target) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n return left; // returns arr.length if all elements < target\n}\n\n\n// ---------------------------\n// Version 3: Upper Bound (first position > target)\n// ---------------------------\nfunction upperBound(arr, target) {\n let left = 0, right = arr.length;\n while (left < right) {\n const mid = Math.floor((left + right) / 2);\n if (arr[mid] <= target) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n return left; // returns arr.length if all elements <= target\n}", |
| 89 | + "java": "// ---------------------------\n// Version 1: Standard Binary Search (find exact target)\n// ---------------------------\npublic int binarySearch(int[] arr, int target) {\n int left = 0, right = arr.length - 1;\n while (left <= right) {\n int mid = left + (right - left) / 2;\n if (arr[mid] == target) {\n return mid;\n } else if (arr[mid] < target) {\n left = mid + 1;\n } else {\n right = mid - 1;\n }\n }\n return -1;\n}\n\n\n// ---------------------------\n// Version 2: Lower Bound (first position >= target)\n// ---------------------------\npublic int lowerBound(int[] arr, int target) {\n int left = 0, right = arr.length;\n while (left < right) {\n int mid = left + (right - left) / 2;\n if (arr[mid] < target) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n return left; // returns arr.length if all elements < target\n}\n\n\n// ---------------------------\n// Version 3: Upper Bound (first position > target)\n// ---------------------------\npublic int upperBound(int[] arr, int target) {\n int left = 0, right = arr.length;\n while (left < right) {\n int mid = left + (right - left) / 2;\n if (arr[mid] <= target) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n return left; // returns arr.length if all elements <= target\n}", |
| 90 | + "go": "// ---------------------------\n// Version 1: Standard Binary Search (find exact target)\n// ---------------------------\nfunc binarySearch(arr []int, target int) int {\n left, right := 0, len(arr)-1\n for left <= right {\n mid := left + (right-left)/2\n if arr[mid] == target {\n return mid\n } else if arr[mid] < target {\n left = mid + 1\n } else {\n right = mid - 1\n }\n }\n return -1\n}\n\n\n// ---------------------------\n// Version 2: Lower Bound (first position >= target)\n// ---------------------------\nfunc lowerBound(arr []int, target int) int {\n left, right := 0, len(arr)\n for left < right {\n mid := left + (right-left)/2\n if arr[mid] < target {\n left = mid + 1\n } else {\n right = mid\n }\n }\n return left // returns len(arr) if all elements < target\n}\n\n\n// ---------------------------\n// Version 3: Upper Bound (first position > target)\n// ---------------------------\nfunc upperBound(arr []int, target int) int {\n left, right := 0, len(arr)\n for left < right {\n mid := left + (right-left)/2\n if arr[mid] <= target {\n left = mid + 1\n } else {\n right = mid\n }\n }\n return left // returns len(arr) if all elements <= target\n}" |
91 | 91 | }, |
92 | 92 | "problems": [ |
93 | 93 | "Binary Search", |
94 | 94 | "Search Insert Position", |
95 | | - "Find Minimum in Rotated Sorted Array" |
| 95 | + "Find Minimum in Rotated Sorted Array", |
| 96 | + "Find First and Last Position of Element in Sorted Array", |
| 97 | + "Search in Rotated Sorted Array", |
| 98 | + "Koko Eating Bananas", |
| 99 | + "Capacity To Ship Packages Within D Days" |
96 | 100 | ] |
97 | 101 | }, |
98 | 102 | { |
|
0 commit comments