[LeetCode] Search in Rotated Sorted Array II

本文介绍了一种在旋转数组中查找特定元素的算法实现,包括非递归和递归两种方法。非递归方法通过循环缩小搜索范围来提高效率,而递归方法则将问题分解为更小的子问题进行搜索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

非递归:

class Solution
{
public:
    bool search(int A[], int n, int target)
    {
        int first = 0, last = n;
        while (first != last)
        {
            const int mid = (first + last) / 2;
            if (A[mid] == target)
                return true;
            if (A[first] < A[mid])
            {
                if (A[first] <= target && target < A[mid])
                    last = mid;
                else
                    first = mid + 1;
            }else if(A[first] > A[mid])
            {
                if (A[mid] < target && target <= A[last-1])
                    first = mid + 1;
                else
                    last = mid;
            }else{
                first ++; //化归的思想,遇到A[first] == A[mid],就first++直到 把问题化归到I能够解决为止。
            }
        }
        return false;
    }
};

递归:

public://此递归方法I和II都适用,因为它只负责先从左边找然后右边找,无需考虑数组中数字的顺序,这就是递归。
   bool binarysearch(int A[],int first,int last,int target){
        int mid = (first + last)/2;
        if(target == A[mid])
            return true;
        if(first == last - 1)
            return false;
        bool res = binarysearch(A,first,mid,target);
        if(res == false)
            res = binarysearch(A,mid,last,target);
        return res;
    }
    bool search(int A[], int n, int target)
    {
      return binarysearch(A,0,n,target);
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值