1、二分查找:
LeetCode704:https://leetcode.cn/problems/binary-search/
注意左闭右开 [low, high) 和左闭右闭 [low, high] 两种情况。
时间复杂度:O(log n)
空间复杂度:O(1)
int search(int* nums, int numsSize, int target){
int low = 0, high = numsSize, mid;
//左闭右开[low, high)
while (low < high) {
mid = (low + high) / 2;
if (nums[mid] < target)
low = mid + 1;
else if (nums[mid] > target)
high = mid;
else return mid;
}
return -1;
}
int search(int* nums, int numsSize, int target){
int low = 0, high = numsSize, mid;
//左闭右闭[low, high]
while (low <= high) {
mid = (low + high) / 2;
if (nums[mid] < target)
low = mid + 1;
else if (nums[mid] > target)
high = mid - 1;
else return mid;
}
return -1;
}
2、双指针移除元素
LeetCode27:https://leetcode.cn/problems/remove-element/
设置快慢指针,一次for循环(或while循环)
int removeElement(int* nums, int numsSize, int val){
int slow = 0, fast = 0;
for (; fast < numsSize; fast++) {
if (nums[fast] != val)
nums[slow++] = nums[fast];
}
return slow;
}