LeetCode—数组(1)

来源:互联网 发布:淘宝不能用 编辑:程序博客网 时间:2024/05/01 06:32

声明:写这篇博文主要是记录自己刷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;    }


0 0