704. 二分查找
重温了二次查找,需要注意两点:
1.while(left<=right) 还是 while(left<right)
2.midile = right - 1还是 midile = right
这两点均与定义的区间的开闭有关
# 左闭右闭写法
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() - 1;
while(left <= right){
int middle = (left + right) /2;
if(nums[middle] > target){
right = middle - 1;
}
else if(nums[middle] < target){
left = middle + 1;
}
else{
return middle;
}
}
return -1;
}
};
27. 移除元素
重点:双指针法 快慢指针
二刷居然完全没印象了
分为fast指针和slow指针,快指针指向原数组元素,满指针指向移除元素后的新数组元素
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slow = 0;
for(int fast = 0; fast < nums.size(); fast++){
if(nums[fast]!=val){
nums[slow++] = nums[fast];
}
}
return slow;
}
};
977.有序数组的平方
也是用到双指针
因为两端都有可能是更大的数
所以要依次比较两端的数大小
vector<int> result(nums.size(), 0);
是 C++ 代码中的一行,它的意思是创建一个名为 result
的 vector
(向量),这个向量的类型是 int
,并且它的大小与 nums
向量相同,同时将向量中的每个元素初始化为 0
。
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> result(nums.size(), 0);
int k = nums.size() - 1;
for(int i = 0, j = nums.size() - 1; i <= j;){
if(nums[i]*nums[i] > nums[j]*nums[j]){
result[k--] = nums[i]*nums[i];
i++;
}else{
result[k--] = nums[j]*nums[j];
j--;
}
}
return result;
}
};
第一天:第二次报名了,上一次耽误了没坚持下来,希望这次一天天地完成好,加油!-v-