Leetcode 第81题:Search in Rotated Sorted Array II--搜索旋转排序数组Ⅱ(C++、Python)

题目地址:搜索旋转排序数组Ⅱ


题目简介:

假设按照升序排序的数组在预先未知的某个点上进行了旋转。(例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] 。

编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。

示例 1:       
输入: nums = [2,5,6,0,0,1,2], target = 0     
输出: true
示例 2:     
输入: nums = [2,5,6,0,0,1,2], target = 3     
输出: false

进阶:本题中的 nums 可能包含重复元素,这会影响到程序的时间复杂度吗?会有怎样的影响,为什么?


题目解析:

因为旋转后,可以将数组看作两个子数组。只要目标值比nums[0]大,就说明可能存在前半部分的数组。如果比nums的最后一个数字小,说明可能存在后半部分的数组里面。

时间复杂度还是O(N),但是会在重复的数上进行了浪费时间。

C++版:

class Solution {
public:
    bool search(vector<int>& nums, int target) {
        if (nums.size() == 0)
            return false;
        int len = nums.size();
        if (target >= nums[0])
        {//前半部分
            for (int i = 0; i < len; i++)
            {
                if (target == nums[i])
                    return true;
                else if (target < nums[i])
                    return false;
            }
        }
        else if (target <= nums[len - 1])
        {//后半部分
            for (int i = len - 1; i >= 0; i--)
            {
                if (target == nums[i])
                    return true;
                else if (target > nums[i])
                    return false;
            }
        }
        return false;
    }
};

Python版:

class Solution:
    def search(self, nums: List[int], target: int) -> bool:
        if len(nums) == 0:
            return False;
        length = len(nums)
        if target >= nums[0]:
            for i in range(length):
                if target == nums[i]:
                    return True
                elif target < nums[i]:
                    return False
        elif target <= nums[length - 1]:
            for i in range(length - 1, -1, -1):
                if target == nums[i]:
                    return True;
                elif target > nums[i]:
                    return False;
        return False;

猜你喜欢

转载自blog.csdn.net/chao_shine/article/details/89598267
今日推荐