704. 二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() - 1;
while(left <= right){ //注意左闭右闭与左闭右开之间的区别
int middle = left + ((right - left) / 2);
if(nums[middle] < target){
left = middle +1;
}else if(nums[middle] > target){
right = middle -1;
}else{
return middle;
}
}
return -1;
}
};
//算法训练营:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html#_704-%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE
27. 移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slowIndex = 0;
for(int fastIndex = 0; fastIndex < nums.size(); fastIndex++ ){
if(val != nums[fastIndex]){
//双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
nums[slowIndex++] = nums[fastIndex];
}
}
return slowIndex;
}
};
//算法训练营:https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html#%E6%80%9D%E8%B7%AF