力扣hot100:旋转排序数组中找目标值

题目描述:

思路分析:

本题前置题目:寻找旋转排序数组中的最小值,解析链接如下

https://mp.csdn.net/mp_blog/creation/editor/156110328

本题是在此题的基础上查找目标值,数组经过旋转之后被分成两个部分,这两个部分都是一个从小到大排列的子数组,如果我们能够得出这两个字数组,然后再分别对他们进行2分查找,就能够查找出目标值。

代码:

java 复制代码
class Solution {
    int zhuixiao(int[] nums){
        int left=0;
        int n=nums.length;
        int right=nums.length-1;
        while(left<right){
            int mid=(right-left)/2+left;
            if(nums[mid]>nums[n-1]){
                left=mid+1;
            }else{
                right=mid;
            }
        }
        return right;
    }
    int erfen(int[] nums,int target,int left,int right){
        while(left<=right){
            int mid=(right-left)/2+left;
            if(nums[mid]==target){
                return mid;
            }
            if(nums[mid]>target){
                right=mid-1;
            }
            if(nums[mid]<target){
                left=mid+1;
            }
        }
        return -1;
    }
    public int search(int[] nums, int target) {
        if(nums.length==0){
            return -1;
        }
        int n=nums.length;
        int a=zhuixiao(nums);
        if(target>=nums[a]&&target<=nums[n-1]){
            return erfen(nums,target,a,n-1);
        }else{
            return erfen(nums,target,0,a-1);
        }
        
    }
}

代码说明:

先找出字数组,分别为【0,a-1】和【a,n-1】。去判断target与nums【n-1】的关系,如果target比nums【n-1】大,则说明其在【0,a-1】中,否则在【a,n-1】中。

相关推荐
颜酱5 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
m0_736919105 小时前
C++代码风格检查工具
开发语言·c++·算法
yugi9878386 小时前
基于MATLAB强化学习的单智能体与多智能体路径规划算法
算法·matlab
DuHz6 小时前
超宽带脉冲无线电(Ultra Wideband Impulse Radio, UWB)简介
论文阅读·算法·汽车·信息与通信·信号处理
Polaris北极星少女6 小时前
TRSV优化2
算法
代码游侠7 小时前
C语言核心概念复习——网络协议与TCP/IP
linux·运维·服务器·网络·算法
2301_763472467 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
abluckyboy8 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法
园小异8 小时前
2026年技术面试完全指南:从算法到系统设计的实战突破
算法·面试·职场和发展
m0_706653238 小时前
分布式系统安全通信
开发语言·c++·算法