Binary Search | 7 Days, 3 LeetCode Problems a Day

Ozan Tekin
4 min readNov 7, 2023

--

1) 704. Binary Search | Easy

Given an array of integers nums which is sorted in ascending order, and an integer target, write a function to search target in nums. If target exists, then return its index. Otherwise, return -1.

You must write an algorithm with O(log n) runtime complexity.

Example 1:

Input: nums = [-1,0,3,5,9,12], target = 9
Output: 4
Explanation: 9 exists in nums and its index is 4

Example 2:

Input: nums = [-1,0,3,5,9,12], target = 2
Output: -1
Explanation: 2 does not exist in nums so return -1

Constraints:

  • 1 <= nums.length <= 104
  • -104 < nums[i], target < 104
  • All the integers in nums are unique.
  • nums is sorted in ascending order.

Solution:

var search = function(nums, target) {
return nums.indexOf(target);
};
  • indexOf() method is used to find the index of a specific element within an array. The index represents the position of the element in the array.

2) 74. Search a 2D Matrix | Medium

You are given an m x n integer matrix matrix with the following two properties:

  • Each row is sorted in non-decreasing order.
  • The first integer of each row is greater than the last integer of the previous row.

Given an integer target, return true if target is in matrix or false otherwise.

You must write a solution in O(log(m * n)) time complexity.

Example 1:

Input: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
Output: true

Example 2:

Input: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
Output: false

Constraints:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 100
  • -104 <= matrix[i][j], target <= 104

Solution:

var searchMatrix = function(matrix, target) {
return matrix.flat().includes(target);
};
  • Matrix Flattening:

Explanation: Matrix flattening is the process of converting a multi-dimensional matrix into a one-dimensional array. It copies all the elements within the array into a single flattened array.

Usage: In this code, matrix.flat() is used to flatten a 2D matrix and transform it into a 1D array.

  • Includes:

Explanation: The includes() method checks whether a specific element exists within an array. It queries whether the element is present in the array and returns either true or false as a result.

Usage: In this code, matrix.flat().includes(target) is used to check if the flattened array contains the target element. If the target element is found in the array, it returns true; otherwise, it returns false.

3) 875. Koko Eating Bananas | Medium

Koko loves to eat bananas. There are n piles of bananas, the ith pile has piles[i] bananas. The guards have gone and will come back in h hours.

Koko can decide her bananas-per-hour eating speed of k. Each hour, she chooses some pile of bananas and eats k bananas from that pile. If the pile has less than k bananas, she eats all of them instead and will not eat any more bananas during this hour.

Koko likes to eat slowly but still wants to finish eating all the bananas before the guards return.

Return the minimum integer k such that she can eat all the bananas within h hours.

Example 1:

Input: piles = [3,6,7,11], h = 8
Output: 4

Example 2:

Input: piles = [30,11,23,4,20], h = 5
Output: 30

Example 3:

Input: piles = [30,11,23,4,20], h = 6
Output: 23

Constraints:

  • 1 <= piles.length <= 104
  • piles.length <= h <= 109
  • 1 <= piles[i] <= 109

Solution:

var minEatingSpeed = function(piles, h) {
let left = 1, right = Math.max(...piles);
while (left < right) {
const mid = Math.floor((left + right) / 2);
if (piles.reduce((total, pile) => total + Math.ceil(pile / mid), 0) > h) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
};
  • reduce function is used to apply a function against an accumulator and each element in the array (from left to right) to reduce it to a single value. In this solution, it is used to calculate the total hours required to finish eating all the bananas at a certain speed.
  • Math.max()[1] static method returns the largest of the numbers given as input parameters, or -Infinity if there are no parameters.
  • Math.floor()[2] static method always rounds down and returns the largest integer less than or equal to a given number.
  • Math.ceil()[3] static method always rounds up and returns the smallest integer greater than or equal to a given number.
  • You can read my second article for information about using while.

--

--