Leetcode---搜索旋转排序数组--O(logn)

搜索旋转排序数组

题目链接:搜索旋转排序数组

思路:
  • 该题目是二叉搜索的变形,变化就是,将一个有序数组,从一个未知节点折断放到末尾
  • 这里处理方式还是相同的,找到mid位置,判断该数是否与目标值相同,如果相同return
  • 不同就与当前范围的第一个数比较,如果不小于,则说明该数前面的数字是有序的,再判断target是否在该范围内,不在就转到后面
  • 如果小于,则说明前面的数中,包含折断位置,那么该数后面的数一定是有序的,即判断是否在后面的范围内,不在则往前找。
	public static int search(int[] nums, int target) {
		
		return search(nums,0,nums.length-1,target);
    }
	public static int search(int[] nums,int first,int last,int target) {
		
		while(first<=last) {
			int mid = first + ((last-first)>>1);
			if(nums[mid]==target) {
				return mid;
			}
			if(nums[mid]>=nums[first]) {
				//前面是有序的
				if(target>=nums[first]&&target<nums[mid]) {
					//在前面搜索即可
					last = mid-1;
				}else {
					first = mid+1;
				}
			}else {
				//后面是有序的
				if(target>nums[mid]&&target<=nums[last]) {
					first = mid+1;
				}else {
					last = mid-1;
				}
			}
		}
		return -1;
	}

猜你喜欢

转载自blog.csdn.net/tiaochewang219/article/details/84973243
今日推荐