leetcode33 Search in Rotated Sorted Array

博客介绍了一道有意思的题,它是一般二分查找的变体,解题思路需在二分过程中对各种情况进行分类讨论,还给出了转载链接。

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

思路:

有意思的一道题。是一般的二分查找的一种变体,需要在二分过程中对各种情况进行分类讨论。

实现:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 class Solution
 5 {
 6 public:
 7     int search(vector<int>& nums, int target)
 8     {
 9         int n = nums.size();
10         int l = 0, r = n - 1, ans = -1;
11         while (l <= r)
12         {
13             int m = l + r >> 1;
14             if (nums[l] > nums[m])
15             {
16                 if (target == nums[m]) { ans = m; break; }
17                 else if (target > nums[m])
18                 {
19                     if (target > nums[r]) r = m - 1;
20                     else l = m + 1;
21                 }
22                 else r = m - 1;
23             }
24             else
25             {
26                 if (target == nums[m]) { ans = m; break; }
27                 else if (target > nums[m]) l = m + 1;
28                 else
29                 {
30                     if (target >= nums[l]) r = m - 1;
31                     else l = m + 1;
32                 }
33             }
34         }
35         return ans;
36     }
37 };
38 
39 int main()
40 {
41     int a[] = {4, 5, 6, 7, 0, 1, 2};
42     int n = sizeof(a) / sizeof(int);
43     int target = 5;
44     vector<int> v(a, a + n);
45     cout << Solution().search(v, target) << endl;
46     return 0;
47 }

 

转载于:https://www.cnblogs.com/wangyiming/p/11161425.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值