704. 二分查找
1.题目连接:704.binary-search- 力扣(LeetCode)
2.解题关键:
注意限制条件:有序整型数组及所有元素都是不重复的
注意搜索区间范围:左闭右闭或左闭右开
3.代码示例:
3.1 左闭右闭解法[left,right]
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size()-1;
int middle;
int cur_num;
while(left<=right){
middle = left + (right - left)/2;
cur_num = nums[middle];
if (cur_num < target){
left = middle+1;
}
else if(cur_num > target){
right = middle-1;
}
else{
return middle;
}
}
return -1;
}
};
3.2 左闭右开解法[left,right)
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size();
int middle;
int cur_num;
while(left < right){
middle = left + (right - left)/2;
cur_num = nums[middle];
if (cur_num < target){
left = middle + 1;
}
else if(cur_num > target){
right = middle;
}
else{
return middle;
}
}
return -1;
}
};
27. 移除元素
1.题目链接:27.remove-element- 力扣(LeetCode)
2.解题关键:
快指针是非目标数字时,赋值给慢指针,直到数组遍历完成,返回慢指针。
3.代码示例:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slow = 0;
int nums_len = nums.size();
for(int fast = 0; fast < nums_len; fast++){
if(val != nums[fast]){
nums[slow] = nums[fast];
slow += 1;
}
}
return slow;
}
};