假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。
示例:输入:[3,4,5,1,2] 输出:1, [4,5,6,7,0,1,2]输出:0
var findMin = function(nums) {
let low = 0,
high = nums.length - 1,
ans = Infinity;
while (low <= high) {
let mid = low + Math.floor((high - low) / 2);
if (nums[low] <= nums[mid]) {
ans = Math.min(ans, nums[low]);
low = mid + 1;
} else {
ans = Math.min(ans, nums[mid]);
high = mid - 1;
}
}
return ans;
};
/**
* @param {number[]} nums
* @return {number}
* 通过二分法寻找有序数组段,找到后,
* 将当前最小值与有序数组段的最小值进行比较,
* 即可获取数组最小值,
* 往往最简单直接的算法实现方式是最高效的。Infinity为正无穷大,-Infinity为无穷小。
*/
网友评论