From c190025e9d3f158142b7646d7c9213bce0862fd0 Mon Sep 17 00:00:00 2001 From: "M.Hitesh" <54840773+hiteshmadapathi@users.noreply.github.com> Date: Mon, 27 Dec 2021 11:09:42 -0700 Subject: [PATCH 1/7] Update README.md --- README.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/README.md b/README.md index 66a8a5be..23f02b6f 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,43 @@ Example 2: Input: nums = [5,7,7,8,8,10], target = 6 Output: [-1,-1] +class Solution: + + def searchRange(self, nums: List[int], target: int) -> List[int]: + start = self.start_index(nums,target) + last = self.last_index(nums,target) + return [start,last] + + def start_index(self, nums, target): + low = 0 + high = len(nums)-1 + ind = -1 + while low<=high: + mid = low+(high-low)//2 + if nums[mid]==target: + ind = mid + high = mid-1 + elif nums[mid]>=target: + high = mid-1 + elif nums[mid]<=target: + low = mid+1 + return ind + + def last_index(self, nums, target): + low = 0 + high = len(nums)-1 + ind = -1 + while low<=high: + mid = low+(high-low)//2 + if nums[mid]==target: + ind = mid + low = mid+1 + elif nums[mid]>=target: + high = mid-1 + elif nums[mid]<=target: + low = mid+1 + return ind + ## Problem 2: (https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/) Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. From a4390136e361f185a7253c182355cc64d144b02c Mon Sep 17 00:00:00 2001 From: "M.Hitesh" <54840773+hiteshmadapathi@users.noreply.github.com> Date: Mon, 27 Dec 2021 11:12:23 -0700 Subject: [PATCH 2/7] Update README.md --- README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/README.md b/README.md index 23f02b6f..e1563eae 100644 --- a/README.md +++ b/README.md @@ -97,4 +97,20 @@ Note: Your solution should be in logarithmic complexity. +class Solution: + + def findPeakElement(self, nums: List[int]) -> int: + low = 0 + high = len(nums)-1 + if len(nums)==0: + return -1 + while low<=high: + mid = low + (high-low)//2 + if ((mid==0 or nums[mid-1]nums[mid+1])): + return mid + elif (mid!=len(nums)-1 and nums[mid+1]>nums[mid]): + low = mid+1 + else: + high = mid-1 + From 0afb8776a1abfeb72466da2ea17ff847185ed408 Mon Sep 17 00:00:00 2001 From: "M.Hitesh" <54840773+hiteshmadapathi@users.noreply.github.com> Date: Mon, 27 Dec 2021 11:12:36 -0700 Subject: [PATCH 3/7] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index e1563eae..645fba5e 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,6 @@ Example 2: Input: nums = [1,2,1,3,5,6,4] Output: 1 or 5 Explanation: Your function can return either index number 1 where the peak element is 2, - or index number 5 where the peak element is 6. Note: From e600c652cf3ec1c2723c16c10f8bfb9443f0c39c Mon Sep 17 00:00:00 2001 From: "M.Hitesh" <54840773+hiteshmadapathi@users.noreply.github.com> Date: Mon, 27 Dec 2021 14:51:00 -0500 Subject: [PATCH 4/7] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 645fba5e..c166e960 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,8 @@ Output: [-1,-1] class Solution: def searchRange(self, nums: List[int], target: int) -> List[int]: + if len(nums)==0: + return [-1,-1] start = self.start_index(nums,target) last = self.last_index(nums,target) return [start,last] From 580206ef4b3dac43115149aea164e01151f440c8 Mon Sep 17 00:00:00 2001 From: "M.Hitesh" <54840773+hiteshmadapathi@users.noreply.github.com> Date: Mon, 27 Dec 2021 15:08:26 -0500 Subject: [PATCH 5/7] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c166e960..c52d8055 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ class Solution: if len(nums)==0: return [-1,-1] start = self.start_index(nums,target) - last = self.last_index(nums,target) + last = self.last_index(nums,target,start) return [start,last] def start_index(self, nums, target): @@ -41,8 +41,8 @@ class Solution: low = mid+1 return ind - def last_index(self, nums, target): - low = 0 + def last_index(self, nums, target,start): + low = start high = len(nums)-1 ind = -1 while low<=high: From d53d817022925e93da7224dcf223f2834d84ae73 Mon Sep 17 00:00:00 2001 From: "M.Hitesh" <54840773+hiteshmadapathi@users.noreply.github.com> Date: Mon, 27 Dec 2021 15:51:26 -0500 Subject: [PATCH 6/7] Update README.md --- README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/README.md b/README.md index c52d8055..7ada7c3c 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,26 @@ Example 2: Input: [4,5,6,7,0,1,2] Output: 0 +Time complexity: O(logn) + +class Solution: + + def findMin(self, nums: List[int]) -> int: + low = 0 + high = len(nums)-1 + if len(nums)==0: + return -1 + while low<=high: + if nums[low] Date: Tue, 14 Apr 2026 17:41:55 -0700 Subject: [PATCH 7/7] Binary Search 2 --- Minimum in Rotated Sorted Array.py | 16 +++++++++++ findPeakElement.py | 14 ++++++++++ searchRange.py | 44 ++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 Minimum in Rotated Sorted Array.py create mode 100644 findPeakElement.py create mode 100644 searchRange.py diff --git a/Minimum in Rotated Sorted Array.py b/Minimum in Rotated Sorted Array.py new file mode 100644 index 00000000..316fc8eb --- /dev/null +++ b/Minimum in Rotated Sorted Array.py @@ -0,0 +1,16 @@ +class Solution: + def findMin(self, nums: List[int]) -> int: + low = 0 + high = len(nums)-1 + + while low<=high: + if nums[low]<=nums[high]: + return nums[low] + mid = low + (high-low)//2 + if (nums[mid]<=nums[mid-1]) and (nums[mid]<=nums[mid+1]): + return nums[mid] + elif nums[low]<=nums[mid]: + low = mid+1 + else: + high = mid-1 + \ No newline at end of file diff --git a/findPeakElement.py b/findPeakElement.py new file mode 100644 index 00000000..2902e12f --- /dev/null +++ b/findPeakElement.py @@ -0,0 +1,14 @@ +class Solution: + def findPeakElement(self, nums: List[int]) -> int: + low = 0 + high = len(nums)-1 + + while lownums[mid-1]) and (mid==len(nums)-1 or nums[mid]>nums[mid+1]): + return mid + elif (nums[mid]nums[mid]): + return mid + else: + low = mid+1 + elif nums[mid] List[int]: + low = 0 + high = len(nums)-1 + + if len(nums)==0 or targetnums[high]: + return [-1,-1] + + firstIndex = self.SearchFirst(nums, target, low, high) + if firstIndex == -1: + return [-1,-1] + LastIndex = self.SearchLast(nums, target, firstIndex, high) + return [firstIndex,LastIndex] +