diff --git a/SearchInRotatedSortedArray.java b/SearchInRotatedSortedArray.java new file mode 100644 index 00000000..e872aaa1 --- /dev/null +++ b/SearchInRotatedSortedArray.java @@ -0,0 +1,39 @@ +// Search in rotated sorted array +// time complexity: O log (n) +// Space Complexity: O (1) + +class Solution { + public int search(int[] nums, int target) { + int low = 0; + int high = nums.length - 1; + + while (low <= high) { + int mid = low + (high - low)/2; + + if (nums[mid] == target) { + return mid; + } + + // left array is sorted + if (nums[low] <= nums[mid]) { + // check if target is present in the sorted array + if (target >= nums[low] && target < nums[mid]) { + // target is present in the left sorted array + high = mid - 1; + } else { + low = mid + 1; + } + } else { // right is sorted + // check if target is present in the sorted array + if (target > nums[mid] && target <= nums[high]) { + // target is present in the right sorted array + low = mid + 1; + } else { + high = mid - 1; + } + } + } + return -1; + + } +} \ No newline at end of file diff --git a/SearchInsideRotatedSortedArrayUnknownSize.java b/SearchInsideRotatedSortedArrayUnknownSize.java new file mode 100644 index 00000000..2b6eba2b --- /dev/null +++ b/SearchInsideRotatedSortedArrayUnknownSize.java @@ -0,0 +1,32 @@ +// Search in rotated sorted array of unknown size +// time complexity: log (n) +// Space Complexity: O (1) + +class Solution { + + public int searchMatrix(ArrayReader arrayReader, int target) { + int low = 0; + int high = 1; + + while (arrayReader.get(high) < target) { + low = high; + high = high * 2; + } + + while (low <= high) { + int mid = low + (high - low)/2; + + if (arrayReader.get(mid) == target) { + return mid; + } + + if (arrayReader.get(mid) > target) { + high = mid - 1; + } else { + low = mid + 1; + } + + } + return -1; + } +} \ No newline at end of file diff --git a/searchTargetIn2DMatrix.java b/searchTargetIn2DMatrix.java new file mode 100644 index 00000000..2f3befac --- /dev/null +++ b/searchTargetIn2DMatrix.java @@ -0,0 +1,38 @@ +// Finding the target by converting the 2D matrix into 1D array +// Time Complexity : O (log (m*n)) +// Space Complexity: O (1) + +class Solution { + public boolean searchMatrix(int[][] matrix, int target) { + if (matrix == null || matrix.length == 0) { + return false; + } + + int rows = matrix.length; // no of rows + int columns = matrix[0].length; // no of columns + + int low = 0; + int high = rows * columns - 1; + + while (low <= high) { + int mid = low + (high - low)/2; // to avoid integer overflow + + // Calculate the row and columns index for the mid + int r = mid / columns; + int c = mid % columns; + + // If target is found, return + if (matrix[r][c] == target) { + return true; + } + + if (matrix[r][c] < target) { + low = mid + 1; + } else { + high = mid - 1; + } + + } + return false; + } +} \ No newline at end of file