题目:[旋转数组的最小数字]
需要注意这几个点:
旋转数组将原数组分为两部分,前面的有序子数组和后面的有序子数组前面的有序子数组比后面的有序子数组大。这是基本的性质。所以对于旋转后的数组,一定有第一个元素比最后一个元素大的性质。当然,存在例外的情形。 旋转0个,就是原数组。[1,0,1,1,1]和[1,1,1,0,1]的情形。此时无法确定中间的元素到底数组第一个还是第二个数组,因此会导致结果不同。对于上面这种情形,最后的解可能出现在前面也可能出现在后面。基本的解法就是判断,
arr[low] <= arr[mid],证明arr[mid]在前半个子数组,此时更新low=mid;否则,arr[mid]在后半个数组,此时更新high=mid.最终结束迭代的情形时 low + 1 = high,此时arr[high]就是最小元素。新闻热点
疑难解答