牛客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)的主要内容,如果未能解决你的问题,请参考以下文章