知识点总结:
- 因为该数组是升序排列的,所以可以用二分查找。不需要遍历数组的每一个元素。二分查找的时间复杂度为 O ( l o g n ) O(log n) O(logn)。第一个数的遍历需要n次,第二个数使用二分查找,所以时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn)。
- 一个时间复杂度更简单的方法:双指针,也是针对升序数列,(从原理上说降序也可以)两个指针移动的次数和不超过n。负载度为
O
(
n
)
O(n)
O(n)。给出一个示意图:
注意事项
若v.size()=3; v[high]=v[3] 出现溢出。遍历的时候应该注意。应该初始high=v.size()-1,而不是v.size()。