声明:写这篇博文主要是记录自己刷leetcode oj的情况,也方便自己以后随时查阅复习,在刷题的过程中,有借鉴了别人好的思想,自己绝对没有抄袭的意图。特此声明。
未完,会在以后不断更新
1.Find Minimum in Rotated Sorted Array
描述:给一个旋转后的排序数组,找到最小的数,数组中不包含重复数
思路:二分查找
代码:
public int findMin(int[] nums) {
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[indexMid]>=nums[index1])
index1=indexMid;
if(nums[indexMid]<=nums[index2])
index2=indexMid;
}
return nums[indexMid];
}
2.
Find Minimum in Rotated Sorted Array II
描述:给一个旋转后的排序数组,找到最小的数,数组中包含重复数。
代码:
public int findMin(int[] nums) {
int start=0;
int end=nums.length-1;
int midIndex=start;
while(nums[end]<=nums[start]){
if(end-start==1){
midIndex=end;
break;
}
midIndex=(start+end)/2;
if(nums[midIndex]==nums[start]&&nums[midIndex]==nums[end]){//当中间数和首尾的数都相等时,这时候二分查找就派不上用场了,只能从头遍历
return MinInOrder(nums,start,end);
}
if(nums[midIndex]>=nums[start]){
start=midIndex;
}
else if(nums[midIndex]<=nums[end]){
end=midIndex;
}
}
return nums[midIndex];
}
public int MinInOrder(int[] nums,int start,int end){
int result=nums[start];
for(int i=start+1;i<=end;i++){
if(result>nums[i]){
result=nums[i];
}
}
return result;
}