《leetCode》:Search in Rotated Sorted Array II

本文探讨了在排序后旋转的数组中查找特定元素的问题,并提供了两种解决方案:一种是简单但效率较低的遍历法;另一种则是利用旋转数组的特点进行优化的二分查找法。

题目

Follow up for "Search in Rotated Sorted Array":
What if duplicates are allowed?

Would this affect the run-time complexity? How and why?

Write a function to determine if a given target is in the array.

题目大意:在一个由排序数组旋转而得到的数组中寻找目标值是否存在。
Search in Rotated Sorted Array可以看这篇博文

思路一:直接遍历

bool search(int* nums, int numsSize, int target) {
    if(nums==NULL||numsSize<1){
        return false;
    }
    for(int i=0;i<numsSize;i++){
        if(nums[i]==target){
            return true;
        }
    }
    return false;
}

虽然没有利用到旋转数组这一特性,时间复杂度为O(n),结果居然AC了。
AC结果如下:

思路二

上面这种思路并没有利用旋转数组这一特性,因此,这个思路将利用这个特性来减少时间复杂度。

bool search(int* nums, int numsSize, int target) {
    if(nums==NULL||numsSize<1){
        return false;
    }
    int begin=0;
    int end=numsSize-1;
    while(begin<=end){
        int mid=begin+(end-begin)/2;
        if(nums[mid]==target){
            return true;
        }
        //以下只比较nums[mid]与nums[end]的大小来控制end和begin的变化 
        if(nums[mid]<nums[end]){
            if(target>nums[mid]&&target<=nums[end])  begin=mid+1;
            else end=mid-1;
        }
        else if(nums[mid]>nums[end]){
            if(target>=nums[begin]&&target<nums[mid]) end=mid-1;
            else begin=mid+1;
        }
        else{
            end--;
        }
    }
    return false;
}

上面的方法虽然利用了二分查找法,但是从AC结果来看,效率并没有改善。可能测试平台的测试用例,出现了很多的第三种情况发生(即执行过多的代码中的end--)的测试用例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值