算法10.21
10.21
1.二分查找
c++函数求数组的长度 .size()
middle值作为下标,要放到数组中才能与target值进行比较
class Solution {
public:
int search(vector<int>& nums, int target) {
int middle;
int low=0,high=nums.size()-1;
while(low<=high){
middle=(low+high)/2;
if(nums[middle]>target)
high=middle-1;
else if(nums[middle]<target)
low=middle+1;
else
return middle;
}
return -1;
}
};
2.移除元素
i为快指针,j为慢指针;分两种情况,当前快指针没有等于我们定义的值,那就将快指针的值赋给慢指针;当前快指针的值正好等于我们定义的值,那么我们慢指针不动,快指针继续往后查找。这样设计可以将慢指针相当于定位到当前是重复值的第一个位置。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {//双指针法
int i=0,j=0;//i是快指针
while(i<nums.size()){
if(val!=nums[i])
nums[j++]=nums[i];
i++;
}
return j;
}
};
3.有序数组的平方
vector 是 C++ 标准库中的一个动态数组容器,它可以自动管理内存大小,可以在运行时根据需要动态增长或缩小。它是一个非常常用且强大的容器,用于存储一系列元素。
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int k=nums.size()-1;//k从数组末尾开始。因为元素平方的最大值一定分布在两边
int i=0,j=nums.size()-1;
vector<int> result(nums.size(), 0);//创建数组,使用nums.size()个0来初始化。输出是nums.size()个0
while(j>=i){
if(nums[i]*nums[i]<nums[j]*nums[j]){//元素的最大值在最右边
result[k--]=nums[j]*nums[j];
j--;
}
else{//最大值在最左边
result[k--]=nums[i]*nums[i];
i++;
}
}
return result;
}
};

浙公网安备 33010602011771号