Find Minimum in Rotated Sorted Array I

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.

Notice

You may assume no duplicate exists in the array.

Example

Given [4, 5, 6, 7, 0, 1, 2] return 0

分析:

Although array is rotated, either its left half part or right half part is sorted. We just need to disgard the sorted part, and continue to search in the rotated part. Unlike regular binary search in which start = mid + 1 or end = mid - 1, we need to set start = mid or end = mid, this is to make sure the remaining half is still rotated. When there are only two numbers left, the right one must be the smallest value in the whole rotated array.

 public class Solution {
public int findMin(int[] num) {
if (num == null || num.length == ) return -;
if (num.length == ) return num[];
int start = , end = num.length - ;
while (start <= end) {
if (num[start] <= num[end]) return num[start];
if (start + == end) return num[end]; int mid = start + (end - start) / ;
if (num[start] < num[mid]){
start = mid + ;
} else {
end = mid;
}
}
return ;
}
}

递归的方法:

 class Solution {
public int findMin(int[] nums) {
if (nums == null || nums.length == ) return -;
return findMinHelper(nums, , nums.length - );
} private int findMinHelper(int[] nums, int start, int end) {
if (start == end) return nums[start];
if (end - start == ) return Math.min(nums[start], nums[end]);
if (nums[start] < nums[end]) {
return nums[start];
}
int mid = start + (end - start) / 2;
if (nums[start] < nums[mid]) {
return findMinHelper(nums, mid + , end);
} else {
// [3, 1, 2]
return findMinHelper(nums, start, mid);
}
}
}

Find Minimum in Rotated Sorted Array II

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.

Notice

The array may contain duplicates.

Example

Given [4,4,5,6,7,0,1,2] return 0.

Analysis:

In this case, we have duplicates in the array, so, we cannot compare arr[start] and arr[mid] to determine which part is the rotated part. In stead, we have check all the numbers in the left part.

 public class Solution {

     public int findMin(int[] num) {
if (num == null || num.length == ) return -;
if (num.length == ) return num[]; int start = ;
int end = num.length - ; if (num[start] < num[end]) return num[start]; // handle case 4 5 6 7 0 1 2
while (start <= end) {
if (start + == end) return num[end]; // eventually, there will be only two numbers left
int mid = start + (end - start) / ;
if (nonDecreasing(num, start, mid)){
start = mid;
} else {
end = mid;
}
}
return ;
} private boolean nonDecreasing(int[] A, int i, int j) {
for (int k = i; k < j; k++) {
if (A[k] > A[k + ] ) return false;
}
return true;
}
}

递归解法:

 class Solution {
public int findMin(int[] nums) {
if (nums == null || nums.length == ) return -;
return findMinHelper(nums, , nums.length - );
} private int findMinHelper(int[] nums, int start, int end) {
if (start == end) return nums[start];
if (end - start == ) return Math.min(nums[start], nums[end]);
int mid = start + (end - start) / ;
boolean firstHalfSorted = sorted(nums, start, mid);
boolean secondHalfSorted = sorted(nums, mid, end); if (firstHalfSorted && secondHalfSorted) {
return nums[start];
} if (firstHalfSorted) {
return findMinHelper(nums, mid + , end);
} else {
return findMinHelper(nums, start, mid);
}
} private boolean sorted(int[] A, int i, int j) {
for (int k = i; k < j; k++) {
if (A[k] > A[k + ] ) return false;
}
return true;
}
}

Find Minimum in Rotated Sorted Array I & II的更多相关文章

  1. 【leetcode】Find Minimum in Rotated Sorted Array I&&II

    题目概述: Suppose a sorted array is rotated at some pivot unknown to you beforehand.(i.e., 0 1 2 4 5 6 7 ...

  2. Find Minimum in Rotated Sorted Array I&&II——二分查找的变形

    Find Minimum in Rotated Sorted Array I Suppose a sorted array is rotated at some pivot unknown to yo ...

  3. Leetcode | Find Minimum in Rotated Sorted Array I && II

    Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...

  4. 【leetcode】Find Minimum in Rotated Sorted Array I & II (middle)

    1. 无重复 Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 ...

  5. [OJ] Find Minimum in Rotated Sorted Array II

    LintCode 160. Find Minimum in Rotated Sorted Array II (Medium) LeetCode 154. Find Minimum in Rotated ...

  6. leetcode 153. Find Minimum in Rotated Sorted Array 、154. Find Minimum in Rotated Sorted Array II 、33. Search in Rotated Sorted Array 、81. Search in Rotated Sorted Array II 、704. Binary Search

    这4个题都是针对旋转的排序数组.其中153.154是在旋转的排序数组中找最小值,33.81是在旋转的排序数组中找一个固定的值.且153和33都是没有重复数值的数组,154.81都是针对各自问题的版本1 ...

  7. 【LeetCode】154. Find Minimum in Rotated Sorted Array II (3 solutions)

    Find Minimum in Rotated Sorted Array II Follow up for "Find Minimum in Rotated Sorted Array&quo ...

  8. LeetCode 新题: Find Minimum in Rotated Sorted Array II 解题报告-二分法模板解法

    Find Minimum in Rotated Sorted Array II Follow up for "Find Minimum in Rotated Sorted Array&quo ...

  9. Leetcode之二分法专题-154. 寻找旋转排序数组中的最小值 II(Find Minimum in Rotated Sorted Array II)

    Leetcode之二分法专题-154. 寻找旋转排序数组中的最小值 II(Find Minimum in Rotated Sorted Array II) 假设按照升序排序的数组在预先未知的某个点上进 ...

随机推荐

  1. P4910 帕秋莉的手环

    题目背景 帕秋莉是蕾米莉亚很早结识的朋友,现在住在红魔馆地下的大图书馆里.不仅擅长许多魔法,还每天都会开发出新的魔法.只是身体比较弱,因为哮喘,会在咏唱符卡时遇到麻烦. 她所用的属性魔法,主要是生命和 ...

  2. BeautifulSoup的find()和findAll()

    BeautifulSoup的提供了两个超级好用的方法(可能是你用bs方法中最常用的).借助这两个函数,你可以通过表现的不同属性轻松过滤HTML(XML)文件,查找需要的标签组或单个标签. 首先find ...

  3. Divisibility by 25 CodeForces - 988E(模拟)

    遇见模拟题 有两种做法 例如这题: 1.直接去算次数(统计哪个数在第几位,然后去运算) 2.模拟操作 贴一个别人的代码...https://blog.csdn.net/weixin_39453270/ ...

  4. 【刷题】UOJ #274 【清华集训2016】温暖会指引我们前行

    寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 "冻死宝宝了!" 这时 远处的天边出现了一位火焰之神 "我将赐予你们温暖和希望! ...

  5. 【刷题】BZOJ 3669 [Noi2014]魔法森林

    Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为1..N,边标号为1..M.初始时小E同学在号节 ...

  6. Luogu 1429 平面最近点对 | 平面分治

    Luogu 1429 平面最近点对 题目描述 给定平面上n个点,找出其中的一对点的距离,使得在这n个点的所有点对中,该距离为所有点对中最小的 输入输出格式 输入格式: 第一行:n:2≤n≤200000 ...

  7. 【poj3375】 Network Connection

    http://poj.org/problem?id=3375 (题目链接) 题意 有$M$个网络接口和$N$台计算机,给出它们的坐标(在同一直线上),一个接口只能接一台计算机,费用为两坐标之差的绝对值 ...

  8. 解题:洛谷 p1858 多人背包

    题面 设$dp[i][j]$表示容量为$i$时的第$j$优解,因为是优解,肯定$dp[i][j]$是随着$j$增大不断递减的,这样的话对于一个新加进来的物品,它只可能从两个容量的转移的前$k$优解中转 ...

  9. Java入门:MyEclipse安装与破解教程

    MyEclipse Pro 2014 GA的安装过程请参考网页:http://blog.my-eclipse.cn/myeclipse-2014-download-and-install.html 安 ...

  10. JSON学习笔记(总结自w3school)

    1. JSON是一种文本. 2. JSON即JavaScript Object Notation(JavaScript对象表示法). JSON用来存储和交换文本信息. JSON比xml更小, 更快, ...