剑指offer 旋转数组的最小数字
2017-05-16 11:01
495 查看
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
暴力法求解:(不提倡)
import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
if(array.length==0){
return 0;
}
int min=Integer.MAX_VALUE;
int min_index=0;
for(int i=0;i<array.length;i++){
if(array[i]<min){
min=array[i];
min_index=i;
}
}
return min;
}
}
稍微优化:
import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
if(array.length==0){
return 0;
}
for(int i=0;i<array.length;i++){
if(array[i]>array[i+1]){
return array[i+1];
}
}
return array[0];
}
}
由于原有数组是递增数组,那么旋转后的数组是部分有序的,一看见部分有序就应该想到二分查找:
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
暴力法求解:(不提倡)
import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
if(array.length==0){
return 0;
}
int min=Integer.MAX_VALUE;
int min_index=0;
for(int i=0;i<array.length;i++){
if(array[i]<min){
min=array[i];
min_index=i;
}
}
return min;
}
}
稍微优化:
import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
if(array.length==0){
return 0;
}
for(int i=0;i<array.length;i++){
if(array[i]>array[i+1]){
return array[i+1];
}
}
return array[0];
}
}
由于原有数组是递增数组,那么旋转后的数组是部分有序的,一看见部分有序就应该想到二分查找:
import java.util.ArrayList; public class Solution { public int minNumberInRotateArray(int [] array) { if(array.length==0){ return 0; } int st=0; int end=array.length-1; int mid=(st+end)/2; while(st<end){ if(array[mid]==array[st]){ return array[mid+1];//循环跳出点注意。。。 } if(array[mid]>array[st]){ st=mid; }else{ end=mid; } mid=(st+end)/2; //return array[st]; } return array[0];//确保考虑到旋转数组旋转后变为原数组的情况 } }
相关文章推荐
- 剑指offer面试题8:旋转数组的最小数字
- leetcode之Search in Rotated Sorted Array,剑指offer之旋转数组的最小数字
- 【九度OJ1386】|【剑指offer8】旋转数组的最小数字
- 剑指 offer set 3 旋转数组的最小数字
- 剑指offer 8 - 旋转数组的最小数字
- 【剑指offer】旋转数组的最小数字
- 剑指offer:08 旋转数组的最小数字
- 剑指offer面八_旋转数组的最小数字
- 剑指offer--旋转数组的最小数字
- [剑指Offer]10.旋转数组的最小数字
- 剑指Offer旋转数组中的最小数字
- 【剑指Offer面试编程题】题目1386:旋转数组的最小数字--九度OJ
- 【剑指Offer学习】【面试题8 : 旋转数组的最小数字】
- 【剑指offer】求旋转数组的最小数字8
- 【剑指Offer面试题】 九度OJ1386:旋转数组的最小数字
- 剑指offer:旋转数组中的最小数字
- 剑指offer-08旋转数组的最小数字
- 【剑指offer】 面试题8: 旋转数组的最小数字
- 剑指offer-8 旋转数组的最小数字
- [剑指offer][面试题08]求旋转数组的最小数字