class Solution
{
public:
int searchInsert(vector<int>& nums, int target)
{
int left = 0, right = nums.size()-1;
while(left < right)
{
int mid = left+(right-left)/2;
if(nums[mid] < target) left = mid+1;
else right = mid;
}
if (nums[right]< target) return right +1;
return right;
}
};
class Solution
{
public:
int peakIndexInMountainArray(vector<int>& arr)
{
int left = 1,right=arr.size()-2;
while(left < right)
{
int mid = left + (right - left + 1)/2;
if(arr[mid] >= arr[mid-1]) left = mid;
else right=mid-1;
}
return right;
}
};
这个是用的加法
cpp复制代码
class Solution
{
public:
int peakIndexInMountainArray(vector<int>& arr)
{
int left = 1,right=arr.size()-2;
while(left < right)
{
int mid = left + (right - left)/2;
if(arr[mid + 1] >= arr[mid]) left = mid + 1;
else right=mid;
}
return right;
}
};
6、162.寻找峰值
cpp复制代码
class Solution
{
public:
int findPeakElement(vector<int>& nums)
{
int left = 0, right = nums.size() - 1;
while(left < right)
{
int mid = left + (right - left)/2;
if(nums[mid] < nums[mid + 1]) left = mid + 1;
else right = mid;
}
return right;
}
};
7、153.寻找旋转数组的最小值
最后left和right指针相遇的时候,返回的值就是要的值,也就是通过中点找到的值。
cpp复制代码
class Solution
{
public:
int findMin(vector<int>& nums)
{
int left = 0,right = nums.size() - 1;
int n = nums.size();
while(left < right)
{
int mid=left+(right-left)/2;
if(nums[mid] > nums[n-1]) left = mid +1;
else right = mid;
}
return nums[right];
}
};