leetcode

Leetcode Solutions (0x6A73)
git clone https://git.pngu.org/leetcode
Log | Files | Refs | Submodules | README

commit c7608fed58e870c99566313ce4994afce2aeda7f
parent 321f23b35ece51614268505a7e41d6baffc88a1e
Author: Jack Sangdahl <jack@pngu.org>
Date:   Fri, 15 May 2026 08:37:54 +0300

153. find minimum in rotated sorted array

Diffstat:
Mfind_min_rotated_arr.c | 21++++++++++++++-------
Mfind_min_rotated_arr.py | 25+++++++++----------------
2 files changed, 23 insertions(+), 23 deletions(-)

diff --git a/find_min_rotated_arr.c b/find_min_rotated_arr.c @@ -8,8 +8,8 @@ * algorithm must be o log n time. */ -int findMin(int *nums, int nums_size) { - int low = 0, high = nums_size - 1; +int findMin(int *nums, int numsSize) { + int low = 0, high = numsSize - 1; while (low < high) { int mid = low + (high - low) / 2; if (nums[mid] < nums[high]) @@ -21,9 +21,16 @@ int findMin(int *nums, int nums_size) { } int main() { - int n1[] = {3, 4, 5, 1, 2}, n2[] = {4, 5, 6, 7, 0, 1, 2}, - n3[] = {11, 13, 15, 17}; - printf("%d\n", findMin(n1, ARRAY_SIZE(n1))); // expect: 1 - printf("%d\n", findMin(n2, ARRAY_SIZE(n2))); // expect: 0 - printf("%d\n", findMin(n3, ARRAY_SIZE(n3))); // expect: 11 + int n1[] = {3, 4, 5, 1, 2}; + int n2[] = {4, 5, 6, 7, 0, 1, 2}; + int n3[] = {11, 13, 15, 17}; + int r1 = findMin(n1, ARRAY_SIZE(n1)); + int r2 = findMin(n2, ARRAY_SIZE(n2)); + int r3 = findMin(n3, ARRAY_SIZE(n3)); + printf("%d\n", r1); + assert(r1 == 1); + printf("%d\n", r2); + assert(r2 == 0); + printf("%d\n", r3); + assert(r3 == 11); } diff --git a/find_min_rotated_arr.py b/find_min_rotated_arr.py @@ -8,23 +8,16 @@ algorithm must be o log n time. """ -class Solution(object): - def findMin(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - if len(nums) == 1 or nums[0] < nums[-1]: - return nums[0] - left, right = 0, len(nums) - 1 - while left <= right: - mid = left + (right - left) // 2 - if mid > 0 and nums[mid - 1] > nums[mid]: - return nums[mid] - if nums[mid] > nums[right]: - left = mid + 1 +class Solution: + def findMin(self, nums: List[int]) -> int: + low, high = 0, len(nums) - 1 + while low < high: + mid = low + (high - low) // 2 + if nums[mid] < nums[high]: + high = mid else: - right = mid - 1 + low = mid + 1 + return nums[low] if __name__ == "__main__":