From 204bedc7f18edb15af28238efb1362e599b95839 Mon Sep 17 00:00:00 2001 From: ShusenTang Date: Wed, 29 Jan 2020 12:06:26 +0800 Subject: [PATCH] Update 153. Find Minimum in Rotated Sorted Array.md --- .../153. Find Minimum in Rotated Sorted Array.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/solutions/153. Find Minimum in Rotated Sorted Array.md b/solutions/153. Find Minimum in Rotated Sorted Array.md index 7944a62..c745a43 100644 --- a/solutions/153. Find Minimum in Rotated Sorted Array.md +++ b/solutions/153. Find Minimum in Rotated Sorted Array.md @@ -10,6 +10,11 @@ 2. 否则即mid在A部分(B存不存在未知), 此时当`nums[low] > nums[high]`时, 说明B部分存在, 则i在区间[mid+1, high]; 3. 否则, 即mid在A部分且B不存在, 即low到high是严格递增的, 最小值即nums[low], 直接返回即可. +或者考虑`nums[high]`和`nums[mid]`的大小关系(考虑`nums[low]`和`nums[mid]`关系不是一个好选择, 见[33题解](https://github.com/ShusenTang/LeetCode/blob/master/solutions/33.%20Search%20in%20Rotated%20Sorted%20Array.md))也可以: +* 若`nums[mid] < nums[high]`,此时最小值只能是位于[low, mid]。 +* 否则若`nums[mid] > nums[high]`,此时最小值只能是位于[mid+1, low]。 +* 假设`nums[mid] == nums[high]`,此时low = mid = high,最小值就是nums[mid]。 + > 注意边界情况. # C++ @@ -24,8 +29,12 @@ public: if(nums[low] > nums[mid]) high = mid; else if(nums[low] > nums[high]) low = mid + 1; else return nums[low]; + // 或者: + // if(nums[mid] > nums[high]) low = 1 + mid; + // else if(nums[mid] < nums[high]) high = mid; + // else return nums[low]; } - return nums[mid]; + return nums[low]; // 这一步应该是不会执行的 } }; ```