解法一
emm 直接遍历比较
class Solution {
public int search(int[] nums, int target) {
for(int i = 0; i < nums.length; i++){
if(nums[i] == target){
return i;
}
}
return -1;
}
}
解法二 二分查找
将数组一分为二,其中一定有一个是有序的,另一个可能是有序,也能是部分有序。
此时有序部分用二分法查找。无序部分再一分为二,其中一个一定有序,另一个可能有序,可能无序。就这样循环。
class Solution {
public int search(int[] nums, int target) {
int l = 0, r = nums.length - 1;
while(l <= r){
int mid = (l + r) / 2;
if(nums[mid] == target){
return mid;
}
if(nums[l] <= nums[mid]){
if(nums[l] <= target && nums[mid] >= target){
r = mid - 1;
}else{
l = mid + 1;
}
}else{
if(nums[mid] <= target && nums[r] >= target){
l = mid + 1;
}else{
r = mid - 1;
}
}
}
return -1;
}
}