704. 二分查找
题目链接:. - 力扣(LeetCode)
看到题目的第一想法:奇偶要分开思考;while循环,跳出条件为找出值或是没有找到(-1or>数组长度);判断语句为与target比大小
看完代码随想录之后的想法 :用双指针做滑动窗口;注意指针与mid的关系,不小心就会一直while;区间不变量
class Solution {
public:
int search(vector<int>& nums, int target) {
int left=0,right=nums.size()-1;
while(left<=right){
int mid=left+(right-left)/2;
if(nums[mid]==target){
return mid;
}else if(nums[mid]>target){
right=mid-1;
}else{
left=mid+1;
}
}
return -1;
}
};
27. 移除元素
题目链接:. - 力扣(LeetCode)
看到题目的第一想法:利用指针做循环遍历;用erase
看完代码随想录之后的想法 :双指针,快慢指针,一个遍历查找,一个记录需要删除的数的标;逆向思维(我想的是if用==val,而这个选择了对!=的进行更新操作)
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;
}
};
学习时长:3h