- 算法
二分查找 - 核心思想
1)首先想到的是双指针,分别找到两个有序数列的起点,根据target与数字第一个数字对比,选择哪个指针移动。
2)另外一个思路就是二分查找法。
第一种效果更好。 - 代码
class Solution {
public int search(int[] nums, int target) {
if(nums.length == 1 && nums[0] == target) return 0;
int first = 0,second = nums.length - 1;
for(int i = 0;i < nums.length - 1;i++){
if(nums[i] > nums[i+1]){
second = i+1;
break;
}
}
if(nums[0] < target){
while(first <= second){
if(nums[first] == target) return first;
first++;
}
}else if(nums[0] > target){
while(second < nums.length){
if(nums[second] == target) return second;
second++;
}
}else{
return 0;
}
return -1;
}
}
class Solution {
public int search(int[] nums, int target) {
int len = nums.length;
int right = len -1;
int left = 0;
while(left <= right){
int mid = left + (right - left)/2;
if(nums[mid] == target) return mid;
else if(nums[mid] >= nums[left]){
if(nums[mid] > target && target >= nums[left]){
right = mid - 1;
}else{
left = mid + 1;
}
}else if(nums[mid] < nums[left]){
if(nums[mid] < target && nums[right] >= target){
left = mid + 1;
}else{
right = mid - 1;
}
}else return -1;
}
return -1;
}
}