diff --git a/Problem10.java b/Problem10.java new file mode 100644 index 00000000..c817e4d4 --- /dev/null +++ b/Problem10.java @@ -0,0 +1,25 @@ +// Time Complexity : O(log N) +// Space Complexity : O(1) +// Did this code successfully run on Leetcode : Yes +// Any problem you faced while coding this : No + +class Solution { + public int findMin(int[] nums) { + int low = 0; + int high = nums.length - 1; + while (low <= high) { + if (nums[low] <= nums[high]) { + return nums[low]; + } + int mid = low + (high - low)/2; + if((mid == 0 || nums[mid] < nums[mid - 1]) && (mid == nums.length-1 || nums[mid] < nums[mid + 1])){ + return nums[mid]; + } else if (nums[low] <= nums[mid]) { + low = mid + 1; + } else { + high = mid - 1; + } + } + return -1; + } +} \ No newline at end of file diff --git a/Problem11.java b/Problem11.java new file mode 100644 index 00000000..f2209ad1 --- /dev/null +++ b/Problem11.java @@ -0,0 +1,24 @@ +// Time Complexity : O(log N) +// Space Complexity : O(1) +// Did this code successfully run on Leetcode : Yes +// Any problem you faced while coding this : No + +class Solution { + public int findPeakElement(int[] nums) { + int low = 0; + int high = nums.length - 1; + + while(low <= high) { + int mid = low + (high - low)/2; + + if((mid == 0 || nums[mid] > nums[mid - 1]) && ( mid == nums.length - 1 || nums[mid] > nums[mid + 1])){ + return mid; + } else if (nums[mid + 1] > nums[mid]) { + low = mid + 1; + } else { + high = mid - 1; + } + } + return -1; + } +} \ No newline at end of file diff --git a/Problem9.java b/Problem9.java new file mode 100644 index 00000000..9c0a6464 --- /dev/null +++ b/Problem9.java @@ -0,0 +1,51 @@ +// Time Complexity : O(log N) +// Space Complexity : O(1) +// Did this code successfully run on Leetcode : Yes +// Any problem you faced while coding this : No + +class Solution { + public int[] searchRange(int[] nums, int target) { + int first = firstBinarySearch(nums, target, 0, nums.length-1); + if (first == -1) return new int[]{-1,-1}; + int second = secondBinarySearch(nums, target, first, nums.length-1); + return new int[]{first, second}; + } + + public static int firstBinarySearch(int[] nums, int target, int low, int high) { + while (low <= high) { + int mid = low + (high - low)/2; + + if (nums[mid] == target) { + if (mid == 0 || nums[mid-1] != target) { + return mid; + } else { + high = mid - 1; + } + } else if (nums[mid] > target) { + high = mid - 1; + } else { + low = mid + 1; + } + } + return -1; + } + + public static int secondBinarySearch(int[] nums, int target, int low, int high) { + while (low <= high) { + int mid = low + (high - low)/2; + + if (nums[mid] == target) { + if (mid == nums.length-1 || nums[mid+1] != target) { + return mid; + } else { + low = mid + 1; + } + } else if (nums[mid] > target) { + high = mid - 1; + } else { + low = mid + 1; + } + } + return -1; + } +} \ No newline at end of file