花了挺长时间,先是把C++熟悉了一下,因为之前只接触过C语言,C++看了几个基本语法学习视频,感觉和C类似,所以就想着直接开始写题吧,边写边学,力扣熟悉了一下输入和调试功能,还比较顺利。比较头疼的是自己好久没写过C代码了,感觉敲起代码好生硬,主要还是跟着讲解来写的,同时先看了视频,直接回顾卡哥讲解
704. 二分查找
class Solution {
public:
int search(vector<int>& nums, int target) {
int left=0,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;
}
};
27. 移除元素
1)暴力法
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];
}
i--;
size--;
}
}
return size;
}
};
2)双指针法
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]) {
nums[slowIndex++] = nums[fastIndex];
}
}
return slowIndex;
}
};
注意点:要知道数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。