LeetCode-153.Find Minimum in Rotated Sorted Array

原创 2016年05月31日 12:41:39

https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/

Suppose a sorted array is rotated at some pivot unknown 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.

二分查找

如果nums[start] < nums[end],那就已经有序了

public int FindMin(int[] nums) 
    {
        int start = 0, end = nums.Length - 1, mid;
        if (end == 0)
            return nums[0];
        while (start+1!=end)
        {
            if (nums[start] < nums[end])
                return nums[start];
            mid = (start + end) / 2;
            if (nums[start] < nums[mid])
                start = mid;
            else
                end = mid;
        }
        return Math.Min(nums[start], nums[end]);
    }

int findMin(vector<int>& nums) 
    {
        int l = 0, r = nums.size() - 1, mid;
    	while (l < r)
    	{
    	    if (nums[l] < nums[r])
			break;
    		mid = l + (r - l) / 2;
    		if (nums[mid] >= nums[l])
    			l = mid + 1;
    		else
    			r = mid;
    	}
    	return nums[l];
    }

如果存在重复数字,如1 0 1 1 1
则mid=2时,无法判定nums[mid]属于哪一边,因此只能顺序查找。参考《剑指Offer》P69
int helper(vector<int> &nums, int l, int r)
{
	int res = nums[l];
	for (int i = l + 1; i <= r; i++)
		res = min(res, nums[i]);
	return res;
}

int findMin(vector<int> nums)
{
	int l = 0, r = nums.size() - 1, mid;
	while (l < r)
	{
		if (nums[l] < nums[r])
			break;
		mid = l + (r - l) / 2;

		if (nums[l] == nums[mid] && nums[r] == nums[mid])//如果三个值相等 只能顺序查找
			return helper(nums, l, r);

		if (nums[mid] >= nums[l])
			l = mid + 1;
		else
			r = mid;
	}
	return nums[l];
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

Rotated Sorted Array(旋转数组总结)

首先什么叫旋转数组,把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转。对于这样的数组,我们可以画一下的一个图来表示。 ...
  • willduan1
  • willduan1
  • 2016年12月17日 09:50
  • 4720

Leetcode解题笔记(Array)

源码见github https://github.com/Kelvinmao/Leetcode/tree/master/Array 2016-08-08更新154.Find Minimum in Ro...
  • kelvinmao
  • kelvinmao
  • 2016年07月23日 22:38
  • 1586

【LeetCode-面试算法经典-Java实现】【153-Find Minimum in Rotated Sorted Array(找旋转数组中的最小数字)】

【153-Find Minimum in Rotated Sorted Array(找旋转数组中的最小数字)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Suppose...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月21日 06:24
  • 1848

leetcode解题之153&154. Find Minimum in Rotated Sorted Array版(在旋转的数组中查找最小数字)

leetcode解题之153&154. Find Minimum in Rotated Sorted Array版(在旋转的数组中查找最小数字)...
  • mine_song
  • mine_song
  • 2017年04月09日 22:33
  • 172

[LeetCode] Find Minimum in Rotated Sorted Array II (包含递增和递减旋转,含有重复数字)

Follow up for "Find Minimum in Rotated Sorted Array": What if duplicates are allowed? Would this af...
  • LGD_YYF
  • LGD_YYF
  • 2014年10月28日 12:36
  • 396

循环有序数组中的二分查找 Search in a rotated sorted array

二分查找是必须要掌握的技能。二分查找适用于有序的、顺序的存储结构。 1、可以用它来查找某一个数 2、可以用于查找某一个范围。如《二分查找有序数组中某个数的所在范围 Search for a Rang...
  • luckyjoy521
  • luckyjoy521
  • 2013年12月22日 19:16
  • 2129

第三周算法分析与设计:Search in Rotated Sorted Array

算法描述: Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehan...
  • qq_20353557
  • qq_20353557
  • 2017年03月09日 22:32
  • 90

Leetcode全数组问题

目录 1、编号2 Median of Two Sorted Arrays There are two sorted arrays A and B of size m and n respe...
  • wangxiaojun911
  • wangxiaojun911
  • 2014年02月06日 03:32
  • 6371

java数组——数组排序sort()

例子: //  排列数组 sort   int[] array = new int[]{1,4,6,8,3};   Arrays.sort(array);   for(int e:array)...
  • werewofe
  • werewofe
  • 2014年01月03日 11:16
  • 779

【LeetCode-面试算法经典-Java实现】【154-Find Minimum in Rotated Sorted Array II(找旋转数组中的最小数字II)】

【154-Find Minimum in Rotated Sorted Array II(找旋转数组中的最小数字II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Fo...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月21日 06:29
  • 2105
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode-153.Find Minimum in Rotated Sorted Array
举报原因:
原因补充:

(最多只允许输入30个字)