【每日一题】33. Search in Rotated Sorted Array

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 07 堆、栈、表、矩阵、集合、队列、数组、字符串、树、图、动态规划、结构体、元组的算法01 当前段必须包含所有字符的最后出现位置。1. 字符串分割成最多片段2. 基因序列功能域划分3. 文本段落划分4. 音频声道分离5. 图像色彩分区6. 社交网络社群划分7. 蛋白质结构域8. 音乐乐章分段9. 代码模块划分10. 章节划分特征:一次扫描,贪心确定边界。 阅读详情

题目描述

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

Your algorithm’s runtime complexity must be in the order of O(log n).

Example 1:

Input: nums = [4,5,6,7,0,1,2], target = 0
Output: 4

Example 2:

Input: nums = [4,5,6,7,0,1,2], target = 3
Output: -1

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

( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。

搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。

你可以假设数组中不存在重复的元素。

你的算法时间复杂度必须是 O(log n) 级别。

题解

暴力循环

首先想到的解法是暴力循环O(N),不管数组是否有序,直接一次遍历,判断数组中是否有target存在。

虽然,题目中限制了时间复杂度要求,但是O(N)也能通过测试!

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

image-20200805232448643

二分查找

下面看题目要求的结果O(logn)。O(logn)+有序数组->二分查找。题目给定也是一个有序数组经过一次旋转,所以,为了使用二分查找,我们需要在给定的数组中找到有序的片段,然后再利用二分查找法。

步骤:

  1. 考虑Corner case:空数组,长度为1的数组;
  2. 其他情况,设定左右边界;
  3. 如果mid == target,直接退出,返回mid
  4. 如果nums[left] <= nums[mid],说明left,mid子数组为有序数组,然后我们再来确定,target是否在这个子数组中:
    1. nums[left] <= target && target < nums[mid]: 在,变换左边界
    2. 否则,变换右边界
  5. 如果nums[left] > nums[mid],说明,mid,right 为有序子数组,然后我们确定,target是否在这个子数组中:
    1. nums[mid] < targe && target <= nums[right]:在,变换左边界
    2. 不在,变换右边界

要注意边界调节,left,right不同的初始值,while里的判断条件也不相同,明确是否取等号,此时的left,right如何变换

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int size = (int)nums.size();
        
        if (size == 0) return -1;
        if (size == 1) return nums[0] == target ? 0 : -1;
        
        int idx = -1, left = 0, right = size - 1;
        
        while (left <= right){
            int mid = left + (right - left)/2;
            
            if (nums[mid] == target){
                idx = mid;
                break;
            }
            if(nums[left] <= nums[mid]){
                if (nums[left] <= target && target< nums[mid])
                    right = mid - 1;
                else
                    left = mid + 1;
            }
            else{
                if (nums[mid] < target && target <= nums[right])
                    left = mid + 1;
                else
                    right = mid - 1;
            }
        }
        
        return idx;
    }
};

欢迎关注公众号,一起学习

FPGA图像处理入门 ZYNQ7020 图像中值膨胀腐蚀滤波 图像处理的三种滤波 中值滤波应用较为广泛 综合膨胀和腐蚀可以实现边缘检测。 阅读详情

相关推荐

OTP语音芯片SOP8的前世今生_如九齐_硕呈_钰绅等以及国产方案KT148A

语音芯片ic的其中一个品类,就是SOP8封装的OTP语音芯片,非常的经典和常用。源头的供应商基本都是台系的原厂,比如:九齐、硕呈、佑华等等,其中佑华就算是鼻祖了,早期的4位机也是在语音市场得到了升华。 OTP(One Time Programmable)是单片机的一种存储器类型,意思是一次性可编程:程序烧入单片机后,将不可再次更改和清除。

qyvhome的博客 1873

在一个递增数组的rotate变换中找target

Search in Rotated Sorted Array Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e.,0 1 2 4 5 6 7might become4 5 6 7 0 1 2). Yo...

weixin_30797199的博客 291

keil自动分配SDRAM空间设置使用

1.修改.sct文件。

qizhi321123的博客 1404

每天一道算法题:33. 搜索旋转排序数组(Search in Rotated Sorted Array)

01 问题描述 Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]). You are given a target value to search. If ...

qq_37170583的博客 319

FunASR语音识别服务在Win11上的Docker部署避坑指南:模型配置与热词优化

本文详细介绍了在Windows 11系统上通过Docker部署FunASR语音识别服务的完整流程,包括环境准备、模型配置、热词优化及常见问题解决方案。特别针对Win11环境下的特殊配置和性能调优提供了实用指南,帮助开发者高效搭建高性能语音识别服务。

e3f4g5的博客 222

4、接收天线:接收电压、功率和传输系数

本文详细探讨了接收天线的性能参数,包括接收电压、功率和传输系数,通过建立等效电路模型分析接收偶极子的电流和开路电压,并定义电压和功率传输函数。研究揭示了天线长度、工作频率及极化失配对传输性能的影响,并提出了优化接收天线性能的策略,为天线系统的设计与优化提供了理论支持。

ll5678的博客 233

【LeetCode】详解搜索旋转排序数组33. Search in Rotated Sorted Array Suppose an array sorted in ascending order is

文章目录前言正文原题:思路1:思路2:思路3:总结 前言 最近忙着期末考试,刚好考完了两科,今天抽出时间继续刷题! 正文 原题: 链接:搜索旋转排序数组 Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., [0,1,2,4,5,6,7] mi...

Qonent的博客 562

【SystemVerilog基础】SystemVerilog Assertion 概述

断言主要是描述复杂的设计行为;是传统验证方法学一个很好的补充,可以检查到电路内部细节,相当于一种白盒验证,传统的验证方法学是纯粹的黑盒验证!property跟上面的sequence差别不大,唯一有差别可能多了两个implication(|->,|=>)注意,当有前置条件时,不满足前置条件不会fail,而是伪真!上面这个因为没有前置条件,每个周期都会去检查!注意:当没有前置条件时,不满足条件会直接fail!

MoorePlus的博客 332

LeetCode81 Search in Rotated Sorted Array II 搜索旋转有序序列II C++

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.(i.e., [0,0,1,2,2,5,6] might become [2,5,6,0,0,1,2]).You are given a target value to search. If found in t...

李歇特冯-兹拜因巴哈的博客 245

Windows密码忘了怎么办?一分钟看懂Windows密码底层机制:无需重装系统也能无痕找回登录密码

忘记Windows开机密码,不一定非得重装系统!本文手把手教你通过提取NTLM Hash值实现“无痕找回密码”,无需PE、无需清除密码,对系统零修改 🛡️ 搭配mimikatz与在线解密平台,小白也能快速上手,了解Windows密码底层机制 🔐

XiaoqiangClub的博客 123

《多模态融合改进》支持目标检测、目标分割、OBB、姿态估计,配置教程

本文以为例,讲解如何配置,支持替换专栏里所有的改进方式。

Limiiiing的博客 795

LeetCode第33题:Search in Rotated Sorted Array(Java详解)

Search in Rotated Sorted Array Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]). You are given a ta...

WangHuanToBeBest 499

RK3588 部署 YOLOv5s 实战:多线程加速从 16FPS 飙升到 120FPS(含性能优化)

因为RK3588包含了3个NPU核心,支持3个核心同时工作、双核合作、以及单核工作。我们可以使用线程池来加速。线程池是一种长街的并发编程模型,它用于管理和复用线程,以提高多线程程序的性能和效率。线程池通常包含以下主要组件:1、任务队列:任务队列用于存储待执行的任务。这些任务可以是函数、方法或其他需要多线程环境中执行的操作。2、线程池管理:线程池管理器负责创建、销毁和管理线程。它会监视任务队列中的任务,根据需要创建线程,执行任务,并在任务完成后将线程放回池中以供重用。

FJN110的博客 99

33. Search in Rotated Sorted Array(Leetcode每日一题-2020.04.27)

Problem Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]). You are given a target value to search. If ...

Bryan要加油 388

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Leetcode每日一题:33.search-in-rotated-sorted-array(搜索旋转排序数组)

思路:利用vector变长特性,将前面旋转的部分移到后面,然后二分查找,O(logn)复杂度 int search(vector<int> &nums, int target) { int len = nums.size(); int right = len-1, left = 0; //boundary condition if (len ...

CodeLuweir 的博客 346

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【leetcode每日刷题】33. Search in Rotated Sorted Array

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e.,[0,1,2,4,5,6,7]might become[4,5,6,7,0,1,2]). You are given a target value to search. If found ...

菜菜鸟的博客 190

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【leetcode每日刷题】81. Search in Rotated Sorted Array II

https://leetcode.com/problems/search-in-rotated-sorted-array-ii/ 使用二分查找的方法,相比33题思路相同,但是有重复数字的判断 class Solution { public boolean search(int[] nums, int target) { int start = 0; i...

菜菜鸟的博客 198

LeetCode#33 Search in Rotated Sorted Array

题目 Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]). You are given a target value to search. If found...

ygtrece的博客 281

leetcode33. Search in rotated sorted array

问题描述: Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e.,[0,1,2,4,5,6,7]might become[4,5,6,7,0,1,2]). You are given a target value to searc...

dihuangxiu8828的博客 260

leetcode题解-33. Search in Rotated Sorted Array && 81. Search in Rotated Sorted Array II

31,题目:Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).You are given a target value to search. If found in

呜呜哈的博客 1122

LeetCode 33. Search in Rotated Sorted Array

一 题目 Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e.,[0,1,2,4,5,6,7]might become[4,5,6,7,0,1,2]). You are given a target value to search. If ...

bohu83的博客 226

【Java】【LeetCode】33. Search in Rotated Sorted Array

题目: Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e.,[0,1,2,4,5,6,7]might become[4,5,6,7,0,1,2]). You are given a target value to search. If f...

zhelong19830726的博客 228

in the java search_LeetCode第[33]题(Java):Search in Rotated Sorted Array

题目:在翻转有序中搜索难度:Medium题目内容:Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.(i.e.,[0,1,2,4,5,6,7]might become[4,5,6,7,0,1,2]).You are given a target value...

weixin_33502772的博客 226

leetcode_40 Search in Rotated Sorted Array II

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e.,[0,0,1,2,2,5,6]might become[2,5,6,0,0,1,2]). You are given a target value to search. If found in the array returntrue, otherwise returnfalse. Examp...

shirley的专栏 176

33. Search in Rotated Sorted Array

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).You are given a target value to search. If found in the ar

不很正派的专栏 264

LeetCode 33:搜索旋转排序数组(Search in Rotated Sorted Array)解法汇总

文章目录Solution 更多LeetCode题解 Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]). You are given a target va...

Utopiabuntu的博客 279
上一篇: 【每日一题】32. Longest Valid Parentheses
下一篇: 【每日一题】34. Find First and Last Position of Element in Sorted Array
csdn0006
博客等级 码龄11年 136粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值