题解
看评论说不知道这道题的意义所在,emm确实有的题暴力就可以解决
主要看思路什么的吧 二分的话效率会更高,所以这里给出两种解法,大家还可以联系一下二分算法。
二分的思路说一下吧,要不然可能不太理解
先判断左右两边是否为有序数组,不管怎么分,左右两边必有一个有序数组,有过左边有序,就判断目标值是否在左区间的范围内,如果在的话那就缩小,不在的话那么一定就在右边
如果右边有序,原理和上述方法相同,来判断缩小的区间范围。
先找到有序的区间范围然后先判断有序的区间段否则为另一部分,这样判断比较方便。
不太理解的话直接看代码~
代码
代码1
class Solution {
public:
int search(vector<int>& nums, int target) {
// sort(nums.begin(),nums.end());
int n = nums.size();
for(int i = 0; i < n; i++){
if(nums[i] == target){
return i;
}
}
return -1;
}
};
代码2
class Solution{
public:
int search(vector<int>& nums,int target){
int n = nums.size();
int l = 0,r = n - 1;
while(l <= r){
int mid = (l + r)/2;
if(nums[mid] == target){
return mid;
}
if(nums[0] <= nums[mid]){
if(nums[0] <= target && target < nums[mid]){
r = mid - 1;
}else{
l = mid + 1;
}
}else{
if(nums[mid] < target && target <= nums[n-1]){
l = mid + 1;
}else{
r = mid - 1;
}
}
}
return -1;
}
};