LeetCode 704. 二分查找:
本题主要要了解二分查找思想,同时要确定注意边界条件(通过middle赋值要不就是+1,要不就是-1,是开区间,不可包含middle)。
时间复杂度 :O(logn)
空间复杂度: O(1)
优缺点:
优点:效率高。
无格外开销。
缺点:有序前提
数组适合因为支持下标访问,链表就不行了。
小数据则线性查找最优。
code:
class Solution {
public:
int search(vector<int>& nums, int target) {
if(nums.size() < 1 || nums.size() > 10000) {
return -1;
}
int l = 0;
int r = nums.size() - 1;
while(l <= r) {
int mid = (l + r) /2;
if (target == nums[mid]) {
return mid;
} else if (target > nums[mid]) {
l = mid + 1 ;
} else {
r = mid - 1 ;
}
}
return -1;
}
};
LeetCode:27. 移除元素
本题需要注意题干中的元素顺序可以改变以及前k个元素不包含val。
主要解题思想是双指针,最优解法为双向指针。
code:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int left = 0;
int right = nums.size() -1;
while (left <= right) {
if(nums[left] == val){
nums[left] = nums[right];
right--;
} else {
left ++;
}
}
return left;
}
};