谢谢bobo老师
我发现floor和"<=target的最后一个元素"这2个需求还是有点区别.
* 比如,存在重复target的情况.
如果找到target, floor返回第一个target的索引,另外一个需求却是要求返回最后一个target的索引.
第二个需求的最简洁代码如下:
```
int searchLastEqualOrSmaller(int *arr, int n, int key)
{
int left=0, right=n-1;
while(left<=right) {
int m = (left+right)/2;
if(arr[m] > key) right = m-1;
else if (arr[m] <= key) left = m+1;
}
return right;
}
```
对比searchLastEqualOrSmaller和floor的代码, 我发现floor代码还是比较复杂的,比如 "向上取整避免死循环" 和 最后返回时的判断. 我看完代码能勉强能理解,但是我似乎说不清楚为啥这么写.