算法1:二分查找
1、首先什么是二分算法肯定是清楚的,就像是我让你去猜一下我今天的工资,但是从0:100说,我会说大了小了,你肯定不会从1开始说道100,这个是简单查找,二分查找是每次都是以一半的数据划分,前提是输入的序列是一个有序的,这个很重要。
2、时间复杂度分析:对于包含n个元素的列表,用二分查找最多需要log2n步,而简单查找最多需要n步(后面的log2就写成log了)。而使用二分查找时,最多需要检查log n个元素。如果列表包含8个元素,你最多需要检查3个元素,因为log 8=3(2^3=8)。如果列表包含1024个元素,你最多需要检查10个元素,因为log 1024=10(2^10=1024)。
3、二分查找的步骤一定是一个范围性查找,划分左右范围的时候一定要确定好边界,不然很容易出错的。

class solution
{
public:
int findtarget(vector<int>& v,int target)
{
int low = 0;
int high = v.size() - 1;
while (low <= high)
{
if ((int) ( low + (high - low) / 2 )==target)
{
return (int)(low + (high - low) / 2);
}
else if ((int)(low + (high - low) / 2) > target)
{
high = (int)(low + (high - low) / 2)-1;
}
else
{
low = (int)(low + (high - low) / 2) + 1;
}
}
return -1;
}
};

浙公网安备 33010602011771号