LeetCode033——搜索旋转排序数组

版权声明:版权所有,转载请注明原网址链接。 https://blog.csdn.net/qq_41231926/article/details/82584549

我的LeetCode代码仓:https://github.com/617076674/LeetCode

原题链接:https://leetcode-cn.com/problems/search-in-rotated-sorted-array/description/

题目描述:

知识点:二分搜索法

思路:在二分搜索的基础上要额外判断nums[left]和nums[mid]值的大小关系

首先设立left指针指向数组中第一个元素,right指针指向数组中最后一个元素,只要满足left <= right,就一直进行以下循环。

(1)如果target的值比nums[left]要大,

a.如果target的值比nums[mid]要大,

a-1.nums[mid]的值大于等于nums[left]的值,我们应该在右侧寻找,令left = mid + 1。

a-2.nums[mid]的值小于nums[left]的值,我们应该在左侧寻找,令right = mid - 1。

b.如果target的值和nums[mid]相等,直接返回mid。

扫描二维码关注公众号,回复: 3109205 查看本文章

c.如果target的值比nums[mid]要小,我们应该在左侧寻找,令right = mid - 1。

(2)如果target的值和nums[left]相等,直接返回left。

(3)如果target的值比nums[left]要小,

a.如果target的值比nums[mid]要大,我们应该在右侧寻找,令left = mid + 1。

b.如果target的值和nums[mid]相等,直接返回mid。

c.如果target的值比nums[mid]要小,

c-1.如果nums[mid]的值大于等于nums[left]的值,我们应该在右侧寻找,令left = mid + 1。

c-2.如果nums[mid]的值小于nums[left]的值,我们应该在左侧寻找,令right = mid - 1。

如果循环结束后还没找到,直接返回-1。

这个方法本质上就是在二分搜索的基础上多加了几个判断语句而已,因此其时间复杂度是O(logn)级别的,其中n为nums数组的长度。算法没有使用任何额外的辅助空间,空间复杂度是O(1)。

JAVA代码:

public class Solution {
	
	public int search(int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1;
        while(left <= right) {
        	int mid = left + (right - left) / 2;
        	if(target > nums[left]) {
        		if(target > nums[mid]) {
        			if(nums[mid] >= nums[left]) {
        				left = mid + 1;
        			}else {
        				right = mid - 1;
        			}
        		}else if(target == nums[mid]) {
        			return mid;
        		}else {
        			right = mid - 1;
        		}
        	}else if(target == nums[left]) {
        		return left;
        	}else {
        		if(target > nums[mid]) {
        			left = mid + 1;
        		}else if(target == nums[mid]) {
        			return mid;
        		}else {
        			if(nums[mid] >= nums[left]) {
        				left = mid + 1;
        			}else {
        				right = mid - 1;
        			}
        		}
        	}
        }
        return -1;
    }
}

LeetCode解题报告:

猜你喜欢

转载自blog.csdn.net/qq_41231926/article/details/82584549
今日推荐