栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

leetcode.33 --- 搜索旋转排序数组

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode.33 --- 搜索旋转排序数组

搜索旋转排序数组

题目链接

题解一:暴力解法,遍历一遍数组,时间复杂度:O(n)

代码如下:

class Solution {
public:
    int search(vector& nums, int target) {
         for(int i = 0;i < nums.size();i++)
         {
             if(nums[i] == target) return i;
         }
         return -1;
             }
};

题解二:题目要求时间复杂度为:O(logn),一般有序数组的我们可以用二分查找来做

代码如下:

class Solution {
public:
    int search(vector& nums, int target) {
     if(nums.empty()) return -1;
     //1.先找到分界点
     int l = 0,r = nums.size() - 1;
     while(l < r)
     {
         int mid = (l + r + 1) >> 1;
         if(nums[mid] >= nums[0]) l = mid;
         else r = mid - 1;
     }
     //2.找到target在哪段区间
     if(target >= nums[0]) l = 0;  //只需要更新左端点,右端点不用变
     else l = r + 1, r = nums.size()-1;//说明target在[r+1,nums.size()-1]
     //3.在2段区间内再次使用2分
     while(l < r)
     {
         int mid = l + r >> 1;
         if(nums[mid] >= target) r = mid;
         else l = mid + 1;
     }
     //找到返回r,没找到返回-1
     if(target == nums[r]) return r;
     return -1;
    }
};

时间复杂度;O(logn)
空间复杂度:O(1)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/955360.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号