Skip to content

Commit ff230a2

Browse files
committed
improve binary search algo
1 parent 3223b94 commit ff230a2

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

src/data/patterns.json

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,17 +82,21 @@
8282
},
8383
{
8484
"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.",
8686
"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}"
9191
},
9292
"problems": [
9393
"Binary Search",
9494
"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"
96100
]
97101
},
98102
{

0 commit comments

Comments
 (0)