704.二分查找
题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
文档讲解:代码随想录
视频讲解:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili
注意点:写二分法时需要注意左右区间的取值问题
C++写法:
class Solution {
public:
int search(vector<int>& nums, int target) {
//采用左闭右闭的写法
int left = 0;//左边界
int right = nums.size() - 1;//右边界
while(left <= right){
int mid = left + (right - left) / 2;//防止left+right的溢出
if(nums[mid] < target)
left = mid + 1;
else if(nums[mid] > target)
right = mid - 1;
else
return mid;
}
return -1;
}
};
27.移除元素
题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
文章讲解:代码随想录
注意点:数组的内存空间是一块连续的内存,不能直接删除数组中的某个元素,只能进行覆盖
C++写法:
/*************************暴力解法*****************************/
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int size = nums.size();
//遍历数组,在找到目标值时将余下数组元素整体向前移动
for(int i = 0; i < size; i++){
if(nums[i] == val){
for(int j = i + 1; j < size; j++){
nums[j - 1] = nums[j];
}
size--;
i--;
}
}
return size;
}
};
/************************双指针解法******************************/
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int fast = 0;//快指针:遍历整个数组
int slow = 0;//慢指针:新数组的元素
for(fast = 0; fast < nums.size(); fast++){
if(nums[fast] != val){
nums[slow++] = nums[fast];
}
}
return slow;
}
};