704.二分法(注意区间)
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
区间定义:当target处于一个左闭右闭的区间里。
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
int search(std::vector<int>& nums, int target) {
int left = 0;
int right = nums.size() - 1;
while (left <= right) {
int mid = left + ((right-left) / 2);
if (nums[mid] > target) {
right = mid - 1;
}
else if (nums[mid] < target) {
left = mid + 1;
}
else {
return mid;
}
}
return -1;
}
};
int main() {
Solution solution;
std::vector<int>a = { 1, 0, 3, 5, 9, 12 };
int target = 5;
int index = solution.search(a, target);
cout<< index<< endl;
return 0;
当target处于一个左闭右开的区间里。
class Solution{
public:
int search(vector<int>&nums, int target){
int left = 0;
int right = nums.size();
while(left < right){
int mid = left + ((right - left)/2);
if(nums[mid] < target){
left = mid+1;
}
elseif(nums[mid]>target){
right = mid;
}
else{
return mid;
}
}
return -1;
}
}
27.移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
暴力解法(做出)
使用两层for循环,一个for循环遍历数组元素,第二个for循环更新数组。但要注意更新数组后,在进入下一个循环前当前下标对应的元素已经是之前下一个下标对应的元素了,要是直接进入下一个循环,会将当前下标对应的元素跳过。因此需要下标值减1。
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
int removeElement(std::vector<int>& nums, int val) {
int ii = 0;
int size = nums.size();
for (int i = 0; i < size; i++) {
if (nums[i] == val) {
for (int j = i; j < size - 1; j++) {
nums[j] = nums[j + 1];
}
i--;
size--;
}
}
return size;
}
};
int main() {
Solution solution;
std::vector<int>a = { 1, 0, 5, 3, 5, 12 };
int target = 5;
int index = solution.removeElement(a, target);
cout<< index<<endl;
for (int b = 0; b < a.size()-1; b++) {
cout << a[b] ;
}
return 0;
}
双指针法(快慢指针法)(做出)
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
int removeElement(std::vector<int>& nums, int val) {
int slowPtr = 0;
for (int fastPtr = 0; fastPtr < nums.size(); fastPtr++) {
if (nums[fastPtr] != val) {
nums[slowPtr] = nums[fastPtr];
slowPtr++;
}
}
return slowPtr;
}
};
int main() {
Solution solution;
std::vector<int>a = { 1, 0, 5, 3, 5, 12 };
int target = 5;
int index = solution.removeElement(a, target);
cout << index << endl;
for (int b = 0; b < a.size() - 1; b++) {
cout << a[b];
}
return 0;
}