算法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;
       }
};
 

  

posted @ 2022-09-04 09:20  铜锣湾陈昊男  阅读(7)  评论(0)    收藏  举报