diff --git a/problem1Solution.java b/problem1Solution.java new file mode 100644 index 00000000..b90a0b2a --- /dev/null +++ b/problem1Solution.java @@ -0,0 +1,47 @@ +//Find First and Last position of Element in Sorted Array +//Time Complexity : O(log n) +//Space Complexity : O(1) + +public class problem1Solution { + private int firstSearch(int low, int high, int[] nums, int target) { + while(low<=high) { + int mid = low + (high - low)/2; + if(nums[mid] == target) { + if(mid == 0 || nums[mid] > nums[mid-1]) return mid; + else { + high = mid - 1; + } + } else if (nums[mid] > target) { + high = mid -1; + } else { + low= mid + 1; + } + } + return -1; + } + + private int lastSearch(int low, int high, int[] nums, int target) { + while(low<=high) { + int mid = low + (high - low)/2; + if(nums[mid] == target) { + if(mid == nums.length-1 || nums[mid] < nums[mid+1]) return mid; + else { + low = mid + 1; + } + } else if (nums[mid] > target) { + high = mid -1; + } else { + low = mid + 1; + } + } + return -1; + } + + public int[] searchRange(int[] nums, int target) { + int n = nums.length; + int first = firstSearch(0, n-1, nums,target); + if(first == -1) return new int[]{-1,-1}; + int last = lastSearch(first, n-1, nums, target); + return new int[]{first,last}; + } +} diff --git a/problem2Solution.java b/problem2Solution.java new file mode 100644 index 00000000..8caadbf2 --- /dev/null +++ b/problem2Solution.java @@ -0,0 +1,24 @@ +//Find Minimum in Rotated Sorted Array +//Time Complexity : O(log n) +//Space Complexity : O(1) + +public class problem2Solution { + public int findMin(int[] nums) { + int low = 0; + int high = nums.length-1; + int result = Integer.MAX_VALUE; + while(low<=high){ + if(nums[low] <= nums[high]) return nums[low]; + int mid = low + (high - low)/2; + System.out.print("mid" + mid); + if(mid > 0 && nums[mid] < nums[mid-1] && nums[mid] nums[mid-1]) && (mid== nums.length-1 || nums[mid] > nums[mid+1])) return mid; + if(nums[mid+1] > nums[mid]) low = mid + 1; + else high = mid - 1; + } + return -1; + } +}