本文主要是介绍二分的再次讨论——LeetCode 153. 寻找旋转排序数组中的最小值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
int findMin(vector<int>& nums) {int n = nums.size();if (nums[n-1] >= nums[0]) return nums[0];int lo = 0, hi = n-1;while (lo < hi) {int mid = (lo + hi) / 2;if (nums[mid] < nums[0]) {hi = mid;} else {lo = mid + 1;}}return nums[lo];}
思考这段代码,其实在讨论二分的时候最重要的就是关于边界细节的讨论。
lo < hi
还是lo <= hi
int mid = (lo + hi) / 2
还是int mid = (lo + hi + 1) / 2
hi = mid
还是hi = mid - 1
lo = mid
还是hi = mid + 1
retrun nums[lo]
还是return nums[hi]
这些细节一不注意就可能造成死循环。
这篇关于二分的再次讨论——LeetCode 153. 寻找旋转排序数组中的最小值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!