66、二分-搜索旋转排序数组

news2024/11/20 10:34:10

 

思路:

        不断二分,首先判断左侧有序还是右侧有序,如果左侧有序那么就在左侧寻找,如果右侧有序那就在右侧寻找。假设左侧有序,那就判断目标值在不在左侧,如果在左侧继续左侧二分。如果不在左侧,那么在右侧继续二分再去寻找。

突出点不断二分,然后在有序部分寻找。有序部分没找到,那就在二分再在有序部分寻找。

代码如下:

public class Solution {

  public int search(int[] nums, int target) {
    if (nums == null || nums.length == 0) {
        return -1;
    }
    return process(nums, 0, nums.length - 1, target);
}

private int process(int[] nums, int L, int R, int target) {
    if (L > R) {
        return -1; // 递归结束条件
    }

    int mid = L + (R - L) / 2;
    if (nums[mid] == target) {
        return mid; // 找到目标值
    }

    // 判断左半部分是否有序
    if (nums[L] <= nums[mid]) {
        // 再判断目标值是否在这个有序的部分中
        if (target >= nums[L] && target < nums[mid]) {
            return process(nums, L, mid - 1, target); // 目标在左侧有序部分,继续在这部分查找
        } else {
            return process(nums, mid + 1, R, target); // 目标不在左侧有序部分,转到右侧查找
        }
    } else {
        // 如果左半部分不是有序的,那么右半部分必定是有序的
        // 判断目标值是否在右侧的有序部分中
        if (target > nums[mid] && target <= nums[R]) {
            return process(nums, mid + 1, R, target); // 目标在右侧有序部分,继续在这部分查找
        } else {
            return process(nums, L, mid - 1, target); // 目标不在右侧有序部分,转到左侧查找
        }
    }
}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1629077.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis可视化工具RedisInsight

下载地址&#xff1a;RedisInsight - The Best Redis GUIRedisInsight provides an intuitive and efficient graphical interface for Redis, allowing you to interact with your databases and manage your data.https://redis.com/redis-enterprise/redis-insight/#insight…

STM32通过ESP8266连接阿里云 详细步骤

一、烧录MQTT固件 ESP8266出厂时&#xff0c;默认是&#xff1a;AT固件。连接阿里云需要&#xff1a;MQTT固件。 因此&#xff0c;我们需要给8266重新烧录 MQTT固件。 针对“魔女开发板&#xff0c;ESP8266模块烧录MQTT固件&#xff0c;图解教程如下&#xff1a; ESP8266 烧录 …

Spring Task学习记录

介绍 cron表达式 cron表达式在线生成器 链接: link 入门案例 Component Slf4j public class MyTask {/*** 定时任务 每隔5秒触发1次*/Scheduled(cron "0/5 * * * * ?")public void executeTask(){log.info("定时任务开始执行&#xff1a;{}", new Date…

什么是外汇爆仓?怎样避免?

外汇爆仓是指当交易者的保证金低于特定比例时&#xff0c;经纪商会自动平仓一个或所有的开仓头寸。避免外汇爆仓的关键在于合理配置资金、设置止损、适度交易、顺势而为以及调整心态。 外汇爆仓是外汇交易中的一种风险控制机制。当交易者的账户净值低于已用保证金的特定比例时&…

C语言 基本数据类型及大小

一、基本数据类型 1.整型int 整型的关键字是int&#xff0c;定义一个整型变量时&#xff0c;只需要用int来修饰即可。也分为短整型和长整型。 2.浮点型 浮点型又分单精度浮点型float和双精度浮点型double。 3.字符型char 前面的整型和浮点型都是用于存放数字。字符型&…

考研数学|跟完武忠祥基础,刷题还是看张宇基础❓

听完武忠祥老师的课程&#xff0c;当然是趁热打铁&#xff0c;多练题&#xff0c;巩固做题技巧 首先&#xff0c;武忠祥老师和张宇老师在基础阶段的课程质量基本是差不多的&#xff0c;如果你听完武忠祥老师的课程&#xff0c;并且基本都听懂了&#xff0c;真的没有必要再去浪…

Autosar MCAL-RH850P1HC Fls配置

文章目录 FlsFlsGeneralFlsAcLoadOnJobStartFlsBaseAddressFlsBlankCheckApiFlsCancelApiFlsCompareApiFlsCopySupportedFlsCriticalSectionProtectionFlsDevErrorDetectFlsDeviceNameFlsDriverIndexFlsFaciEccCheckFlsGetJobResultApiFlsGetStatusApiFlsLoopCountFlsReadImmed…

大型语言模型高效推理综述

论文地址&#xff1a;2404.14294.pdf (arxiv.org) 大型语言模型&#xff08;LLMs&#xff09;由于在各种任务中的卓越表现而受到广泛关注。然而&#xff0c;LLM推理的大量计算和内存需求给资源受限的部署场景带来了挑战。该领域的努力已经朝着开发旨在提高LLM推理效率的技术方…

libVLC 制作一款精美的播放器

1.简介 本文将简单介绍使用libVLC制作一款精美的播放器。 开发环境:Visual Studio + Qt插件。 Qt版本:Qt5.9。 libVLC版本:3.0.20。 以下是运行界面效果图:截取其中几张。 右键菜单,功能还是比较齐全。 2.ui界面构成 接下来简单介绍一下ui界面构成。 主界面由播放树…

【Linux内核驱动基础】从零开始手搓一个从上层应用到底层驱动的IO口代码

【Linux内核驱动基础】从零开始手搓一个从上层应用到底层驱动的IO口控制代码 文章目录 【Linux内核驱动基础】从零开始手搓一个从上层应用到底层驱动的IO口控制代码一、驱动基础认知1.为什么要学会写驱动2.文件名与设备号3.open函数从上层打通到底层硬件的详细过程 二、基于内核…

22年全国职业技能大赛——Web Proxy配置(web 代理)

前言&#xff1a;原文在我的博客网站中&#xff0c;持续更新数通、系统方面的知识&#xff0c;欢迎来访&#xff01; 系统服务&#xff08;22年国赛&#xff09;—— web Proxy服务&#xff08;web代理&#xff09;https://myweb.myskillstree.cn/114.html 目录 RouterSrv …

解决问题:pos_label=1 is not a valid label. It should be one of [‘0‘, ‘1‘]

文章目录 一、现象二、解决方案 一、现象 ...... model.fit(X_train, y_train) y_pred model.predict(X_test) recall recall_score(y_test, y_pred) precision precision_score(y_test, y_pred) ......执行语句到**“recall recall_score(y_test, y_pred)”**这里发现报错…

【SpringBoot整合系列】SpringBoot整合Redis[附redis工具类源码]

目录 SpringBoot整合Redis1.下载和安装Redis2.新建工程&#xff0c;导入依赖3.添加配置4.先来几个基本的示例测试代码输出结果用redis客户端查看一下存储内容 5.封装redis工具类RedisKeyUtilRedisStringUtilRedisHashUtilRedisListUtilRedisSetUtilRedisZsetUtil备注 6.测试通用…

Pytorch 之torch.nn初探 卷积--Convolution Layers

任务描述 本关任务&#xff1a; 本关提供了一个Variable 类型的变量input&#xff0c;按照要求创建一 Conv1d变量conv&#xff0c;对input应用卷积操作并赋值给变量 output&#xff0c;并输出output 的大小。 相关知识 卷积的本质就是用卷积核的参数来提取原始数据的特征&a…

成都金沙国际学校招生介绍

成都金沙国际学校于2017年9月正式开学&#xff0c;涵盖了初中、高中学段&#xff0c;致力于为川南地区培育更多更优秀的国际化人才&#xff0c;是一所真正意义上的外国语教育窗口学校。校园环境优美&#xff0c;教学设施全市一流&#xff0c;师资团队精良&#xff0c;游学、留学…

绘制签章 乱码问题 (踩坑日记)

签章汉字乱码问题 原因:我们在docker上因为没有汉字字体需要我们手动把文件打进去 注意点:如果开启了打包过滤加上字体不过滤 绘制签章转载

系统服务(22年国赛)—— 磁盘管理(压缩去重)

前言&#xff1a;原文在我的博客网站中&#xff0c;持续更新数通、系统方面的知识&#xff0c;欢迎来访&#xff01; 系统服务&#xff08;22年国赛&#xff09;—— 磁盘管理(压缩&&去重)https://myweb.myskillstree.cn/90.html 目录 StorageSrv 安装并创建vdo 将…

3122.使矩阵满足条件的最少操作次数

周赛第三题,知道要用动态规划,但是不知道怎么回到子问题 显然根据题意我们需要让每一列都相同,但是相邻列不能选择同一种数字,观察到数据nums[i]介于0-9,我们就以此为突破口. 首先我们用count[n][10], count[i][j]记录第i1列值为j的元素个数,转移方程如下: dfs(i,pre) max(dfs…

Vue基于高德地图API封装一个地图组件

一、参考资料 高德开放平台 | 高德地图API (amap.com) 二、安装及配置 pnpm i vuemap/vue-amap --save man.ts 密钥及安全密钥需要自己到高德地图开放平台控制台获取. import { createApp } from vue import App from ./App.vue import router from ./router i…