看到题目还在想,这题还用考吗?直接 array.sort().shift() 不就解决了。其实还要从时间复杂度的方向去考虑问题,另外,直接用api,确定面试官不会把你赶出去吗??题目要求用旋转数组的特性,其实这道题主要考察二分查找,用二分查找的方法去找到数组中的最小元素。
题目描述

解题思路
数组旋转后可以划分为是两个排序的子数组,前面元素都大于或者等于后面子数组元素,并且最小的元素正好是两个子数组的分界点,给出的数组在一定程度上也是排序的,所以可以用二分查找O(logN)来实现。
解题步骤
- 设置low,high,代表首尾连个指针;
- 获取中间元素mid,判断mid和尾指针的大小;
- 如果mid大于high,说明最小值在后区,low=mid+1;
- 如果mid小于high,说明最小值在前区,high=mid;
- mid等于high,直接high–。
Coding
var minArray = function(numbers) {
if(!numbers.length) return 0;
let low = 0;
let high = numbers.length - 1;
while(low < high){
const mid = Math.floor((low + high) / 2);
if(numbers[mid] > numbers[high]){
low = mid + 1;
}else if(numbers[mid] < numbers[high]){
high = mid;
}else{
high--
}
}
return numbers[low];
}

本文探讨了一道编程面试题,涉及旋转数组中找最小元素的挑战。通过分析时间复杂度,指出直接使用API可能并不适用,而应当利用数组旋转后的特性,即两个排序子数组的分界点。解题策略是采用二分查找算法,以O(logN)的时间复杂度找到最小值。代码示例展示了如何实施这一方法。

322

被折叠的 条评论
为什么被折叠?



