二分查找
class Solution {
public:
int search(vector<int>& nums, int target) {
int slow = 0, fast = nums.size() - 1;
// 留心size后的-1不要遗忘
while (slow <= fast) {
// 注意这里循环条件的等号若有,则后续大侧赋值边界需要收缩1,因为除以2时,0.5会被舍去,取到低值
// int mid = (slow + fast) / 2;
int mid = slow + ((fast - slow) / 2);
// 应当用第二种方式,避免数值超出界限
if (nums[mid] == target) {
return mid;
}
else if (nums[mid] > target) {
fast = mid - 1;
}
else {
slow = mid + 1;
}
}
return -1;
}
};
时间复杂度O(log n)
空间复杂度O(1)
数组原地移除元素
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
// 数组原地-》快慢指针
int slow = 0;
for (int fast = 0; fast < nums.size(); fast++){
if (nums[fast] != val)
nums[slow++] = nums[fast];
}
return slow;
}
};
时间复杂度O(n)
空间复杂度O(1)