对二分思想的体会以及结对编程的感想
Posted apale
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对二分思想的体会以及结对编程的感想相关的知识,希望对你有一定的参考价值。
二分查找可以在有序的支持随机访问的容器中快速查找某个元素的信息
时间复杂度: (O(logN))
原始版本:
递归实现:
int binarySearch(int a[],int val,int l,int r)
{
if(l > r) return -1;
int m = l + r >> 1;
if (val == a[m])
return m;
else if (val < a[m])
return binarySearch(a,val,l,m-1);
else
return binarySearch(a,val,m+1,r);
}
非递归实现:
int binarySearch(int a[],int val,int l,int r)
{
int m, ret = -1;
while(l <= r)
{
m = l + r >> 1;
if (val == a[m])
{
ret = m;
break;
}
else if(val < a[m])
r = m - 1;
else
l = m + 1;
}
return ret;
}
C++ STL中提供了三种二分查找函数
1、binary_search(f1,f2,val)
????返回区间([f1,f2))中是否存在val,存在则返回(true),否则返回(false)。
2、****lower_bound(f1,f2,val)****
??返回区间([f1,f2))中第一个大于等于(val)的元素的下标
丑陋的实现:
int my_lower_bound(int a[],int val,int l,int r)
{
int m;
while(l < r)
{
m = l + r >> 1;
if(val <= a[m])
r = m;
else
l = m + 1;
}
return l;
}
3、****upper_bound(f1,f2,val)****
??返回区间([f1,f2))中第一个大于(val)的元素的下标
丑陋的实现:
int my_upper_bound(int a[],int val,int l,int r)
{
int m;
while(l < r)
{
m = l + r >> 1;
if(val < a[m])
r = m;
else
l = m + 1;
}
return l;
}
需要注意的是传入的区间都是左闭右开的
结对编程感想:
两人一起写代码时因为思路和代码风格的差异,往往会难以理解对方的代码。
结对编程提高了我阅读别人代码的能力,同时我也更注重自身代码的规范,尽量清晰易懂,让同伴方便阅读。
以上是关于对二分思想的体会以及结对编程的感想的主要内容,如果未能解决你的问题,请参考以下文章