九、剑指 Offer 11. 旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。
//二分查找,正确解 var minArray = function(numbers) { var nums=numbers var left = 0; var right = nums.length - 1; while (left < right) { var mid = Math.floor(left + (right - left) / 2) if (nums[mid] > nums[right]) { left = mid + 1; } else if (nums[mid] < nums[right]) { right = mid; } else { right--;//在数组中有重复数字的解决方法 } } return nums[left]; };
第二种方法for循环遍历
//遍历:时间O(n) var minArray = function(numbers) { for(var i =0;i<numbers.length;i++){ if(numbers[i]<numbers[0]) // 一旦遇到比第一个数小的值就是最小值 return numbers[i]; } return numbers[0]; // 数组中的数全部相同或者未旋转 };
第三种方法先sort排序再返回最小数。
var minArray = function(numbers) { numbers.sort(compare); return numbers[0]; }; function compare (a,b) { return a-b; }