算法系列——Find Minimum in Rotated Sorted Array
2017-07-11 15:00
375 查看
算法描述
Suppose an array sorted in ascending order is rotated at some pivotunknown to you beforehand.
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
Find the minimum element.
You may assume no duplicate exists in the array.
题目含义:题中定义了一种新的排序数组形式,旋转数组,即把一个数组最开始的若干个元素搬到数组的末尾。例如:{0,1,2,4,5,6,7} 的一个旋转数组为{4,5,6,7,0,1,2},要求找到其中最小的一个元素。
解题思路:显示我们可以通过暴力解法来遍历找到这个最小值,时间复杂度为O(n),但是这样显然没有利用旋转数组的特点,并不是最优解法。在排序的数组中,我们可以利用二分查找法实现O(logn)的查找。
特别注意:
以下情况:
如果排序数组的前面的0个元素搬到后面,也是符合旋转数组的定义,因此要特别注意这种情况;
如果 首尾元素和中间元素值相同,这种情况下并不能确定最小值在哪个区间,所以需要顺序查找法特殊处理。
以下为Java 语言实现的算法。
public class Solution { public int findMin(int[] nums) { if(nums==null) throw new IllegalArgumentException("Invalid parameter"); int index1=0; int index2=nums.length-1; int indexMid=index1; while(nums[index1]>=nums[index2]){ if(index2-index1==1){ indexMid=index2; break; } indexMid=(index1+index2)/2; if(nums[index1]==nums[index2]&&nums[index1]==nums[indexMid]) return minOrder(nums,index1,index2); if(nums[indexMid]>=nums[index1]) index1=indexMid; else if(nums[indexMid]<=nums[index2]) index2=indexMid; } return nums[indexMid]; } private int minOrder(int[] nums,int index1,int index2){ int result=nums[index1]; for(int i=index1+1;i<=index2;i++){ if(result>nums[i]) result=nums[i]; } return result; } }
相关文章推荐
- 字符串算法——查找有序数组旋转后最小值(有重复元素)(Find Minimum in Rotated Sorted Array II)
- 【LeetCode-面试算法经典-Java实现】【153-Find Minimum in Rotated Sorted Array(找旋转数组中的最小数字)】
- LeetCode Find Minimum in Rotated Sorted Array系列
- 【LeetCode-面试算法经典-Java实现】【154-Find Minimum in Rotated Sorted Array II(找旋转数组中的最小数字II)】
- 算法分析与设计课程(15):【leetcode】 Find Minimum in Rotated Sorted Array
- Find Minimum in Rotated Sorted Array系列解题报告
- 字符串算法——查找有序数组旋转后的最小值(无重复元素)(Find Minimum in Rotated Sorted Array)
- 简单的算法题, Find Minimum in Rotated Sorted Array 的Python实现。
- LeetCode---Find Minimum in Rotated Sorted Array
- Hard-题目5:154. Find Minimum in Rotated Sorted Array II
- Leetcode Find Minimum in Rotated Sorted Array
- LeetCode Find Minimum in Rotated Sorted Array
- 【Leetcode】【Medium】Find Minimum in Rotated Sorted Array
- 153. Find Minimum in Rotated Sorted Array
- find-minimum-in-rotated-sorted-array
- LeetCode-Find Minimum in Rotated Sorted Array(找出反转数组中的最小值)
- 【LeetCode】Find Minimum in Rotated Sorted Array 在旋转数组中找最小数
- LeetCode 153 Find Minimum in Rotated Sorted Array
- *LeetCode-Find Minimum in Rotated Sorted Array
- LeetCode Find Minimum in Rotated Sorted Array