确定用左闭右开的区间表示。 [a,b)
这种表示,a==b是没有意义的
做一题,
[ ] 704.二分查找 :::info 前提:
有序数组
无重复元素 ::: 代码:(详细注释)
//O(logn)
class Solution {
public:
int search(vector<int>& nums, int target) {
int l = 0;
int r = nums.size();
while (l<r) //这里等于是没有意义的
{
int mid = l + ((r - l) >> 1); //注意这个符号方向
if(nums[mid]<target)
l = mid + 1;
else if(target<nums[mid])
r = mid;
else
return mid;
}
return -1; //没有意义代表查找失败
}
};
分析:
经典二分查找算法[ ] 35.搜索插入位置 :::info 前提:
有序数组
- 无重复元素
:::
代码:(详细注释)
```cpp //二分法 O(logn) //跟704一致,唯一的不同就是把返回-1改成返回r//暴力法 O(n) class Solution { public: int searchInsert(vector<int>& nums, int target) { for (size_t i = 0; i < nums.size(); ++i) { //这一段能够处理三种情况 //target在数组最前面 //target等于数组中某一个元素 //target插入数组的位置 if(nums[i]>=target) return i; } //处理最后一种情况,target在数组最后面 return nums.size(); } };
```
分析:
是704的一个进阶。
暴力法,是因为这个情况是可以穷举的。