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

2024-04-28 03:04

本文主要是介绍66、二分-搜索旋转排序数组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

思路:

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

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

代码如下:

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); // 目标不在右侧有序部分,转到左侧查找}}
}}

这篇关于66、二分-搜索旋转排序数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/942178

相关文章

JavaScript对象转数组的三种方法实现

《JavaScript对象转数组的三种方法实现》本文介绍了在JavaScript中将对象转换为数组的三种实用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录方法1:使用Object.keys()和Array.map()方法2:使用Object.entr

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

C++归并排序代码实现示例代码

《C++归并排序代码实现示例代码》归并排序将待排序数组分成两个子数组,分别对这两个子数组进行排序,然后将排序好的子数组合并,得到排序后的数组,:本文主要介绍C++归并排序代码实现的相关资料,需要的... 目录1 算法核心思想2 代码实现3 算法时间复杂度1 算法核心思想归并排序是一种高效的排序方式,需要用

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程