【LeetCode】寻找旋转排序数组中的最小值 Java 题解
题目描述
已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ..., a[n-2]] 。
给你一个元素值 互不相同 的数组 nums ,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的 最小元素 。
复制代码
思路分析
今天的算法每日一题是寻找旋转排序数组中的最小值。这个题目可以用二分算法求解。题目指出了排序数组,说明数组是有序的。我们首先假设固定旋转数组后的最后一个位置,然后每一个数组元素 nums[i] 与 nums[n - 1] 比较,会有大于,或者小于等于两种情况。就可以转换成一个新的有序数组,这就和我们平时常见的排序数组一样,使用二分求解。具体实现代码如下:
通过代码
复制代码
总结
上述算法的时间复杂度是 O(log(n)),空间复杂度是 O(1)
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【HQ数字卡】的原创文章。
原文链接:【http://xie.infoq.cn/article/9f6a25fcf8e2c83905fae844f】。文章转载请联系作者。
评论