题目较为简单,易错的地方在于二分法中,left、right和mid的关系,需要根据自己不同的计算方式来选择合适的判断语句。
class Solution {
public:
int search(vector<int>& nums, int target) {
int l = 0;
int r = nums.size()-1;
while(l <= r){
int mid = l+(r-l)/2;
if (nums[mid] == target){
return mid;
} else if (nums[mid] > target){
r = mid - 1;
} else {
l = mid + 1;
}
}
return -1;
}
};
此题在于培养双指针的意识,对于一维数组,采用双指针可以只遍历数组一次,可以节省一些时间。一但有了这个思路,后续便比较简单了。此题的易错点在于角标的判断,有些情况下数组会越界,所以需要多思考,减少错误。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int l = 0;
int r = nums.size()-1;
while(l <= r){
while (nums[l] == val){
nums[l] =nums[r];
r--;
}
l++;
}
return l;
}
};