Medium!

题目描述:

假设按照升序排序的数组在预先未知的某个点上进行了旋转。

( 例如,数组 [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  可能包含重复元素。
  • 这会影响到程序的时间复杂度吗?会有怎样的影响,为什么?

解题思路:

这道是之前那道 Search in Rotated Sorted Array 在旋转有序数组中搜索 中的方法,可以得到代码如下。

C++解法一:

 1 class Solution {
 2 public:
 3     bool search(int A[], int n, int target) {
 4         if (n == 0) return false;
 5         int left = 0, right = n - 1;
 6         while (left <= right) {
 7             int mid = (left + right) / 2;
 8             if (A[mid] == target) return true;
 9             else if (A[mid] < A[right]) {
10                 if (A[mid] < target && A[right] >= target) left = mid + 1;
11                 else right = mid - 1;
12             } else if (A[mid] > A[right]){
13                 if (A[left] <= target && A[mid] > target) right = mid - 1;
14                 else left = mid + 1;
15             } else --right;
16         }
17         return false;
18     }
19 };

 

相关文章:

  • 2022-12-23
  • 2021-10-27
  • 2021-07-04
  • 2021-04-10
  • 2021-09-17
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-08-15
  • 2022-02-21
  • 2021-05-20
  • 2022-02-22
  • 2022-01-04
  • 2021-06-06
  • 2022-12-23
相关资源
相似解决方案