牛客Top200---在旋转过的有序数组中寻找目标值(java)

Posted 小样5411

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客Top200---在旋转过的有序数组中寻找目标值(java)相关的知识,希望对你有一定的参考价值。

题目

解法

这题不难,简单题,很容易想到直接for循环遍历,不能遍历到就返回-1,能遍历到就直接返回下标

1、常规解

import java.util.*;

public class Solution {
   
    public int search (int[] nums, int target) {
        //遍历nums数组
        for(int i = 0 ; i < nums.length ; i++){
            if(nums[i] == target){
                return i;
            }
        }
        return -1;
    }
}

时间复杂度O(n)

2、优化(二分法)

但是这样肯定不行,是可以优化的,这题目的也不是为了考你一个for循环,观察题目,查找目标,且是有序数组,符合这个条件,就可以用二分查找

import java.util.*;

public class Solution {
    public int search (int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1;
        int mid = 0;
        while(left <= right){
            mid = (left+right)/2;
            if(nums[mid] < target){
                left = mid + 1;
            }else if(nums[mid] > target){
                right = mid - 1;
            }else{
                return mid;//返回下标
            }
        }
        return -1;
    }
}

时间复杂度O(logn)

以上是关于牛客Top200---在旋转过的有序数组中寻找目标值(java)的主要内容,如果未能解决你的问题,请参考以下文章

牛客Top200---合并两个有序数组

牛客Top200刷题(java)

牛客Top200---合并k个有序链表(java)

牛客Top200---最长无重复子数组(java详解)

牛客Top200---数组中只出现一次的两个数字(java)

牛客Top200---链表排序(java)