题目链接-二分查找
解法一 左闭右闭
时间复杂度:O(logn)
#include<bits/stdc++.h>
using namespace std;
int n, target, middle;
int a[100000];
int search(int target){
int left = 0, right = n - 1;
while (left <= right){
middle = (left + right) / 2;
if (a[middle] > target){
right = middle - 1;
}
else if (a[middle] < target){
left = middle + 1;
}
else {
return middle;
}
}
return -1;
}
int main(){
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
cin >> target;
printf("%d\n", search(target));
return 0;
}
解法二 左闭右开
时间复杂度:O(logn)
#include<bits/stdc++.h>
using namespace std;
int n, target, middle;
int a[100000];
int search(int target){
int left = 0, right = n;
while (left < right){
middle = (left + right) / 2;
if (a[middle] > target){
right = middle;
}
else if (a[middle] < target){
left = middle + 1;
}
else {
return middle;
}
}
return -1;
}
int main(){
cin >> n;
for (int i = 0; i < n; i++){
cin >> a[i];
}
cin >> target;
printf("%d\n", search(target));
return 0;
}
题目链接-删除元素
双指针法
时间复杂度:O(n)
#include<bits/stdc++.h>
using namespace std;
int n, val;
int nums[200];
int main(){
int nums[200];
cin >> n;
for (int i = 0; i < n; i++){
cin >> nums[i];
}
cin >> val;
int fast, slow = 0;
for (fast = 0; fast < n; fast++){
if (nums[fast] != val){
nums[slow++] = nums[fast];
}
}
printf("%d\n", slow);
return 0;
}
![](https://img-blog.csdnimg.cn/img_convert/0ede9aa36a62cc6b09dbb8329facbd2c.gif)
总结
这两道题目反应的知识点是很简单的,但是对于函数的调用和类与对象的使用是不过熟练的,经常出现和自己想的不一样的结果,接下来还得去补一下函数和类的知识点。
再接再厉!!