704.二分查找
● 今日学习的文章链接和视频链接
文章:代码随想录
视频:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili
● 自己看到题目的第一想法
使用二分法查找
● 看完代码随想录之后的想法
学习了二分法中的左闭右闭和左闭右开。
需要设置left,right和middle,然后在while里面加几个if条件(在middle左,在middle右,middle)找出答案。不存在则return -1。
左闭右闭:
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 - left) / 2);
if(nums[middle] > target){
right = middle - 1;}
else if(nums[middle] < target){
left = middle + 1;}
else{
return middle;}
}
return -1;
}
};
左闭右开:
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size();
while(left < right){
int middle = left + ((right - left) / 2);
if(nums[middle] > target){
right = middle;}
else if(nums[middle] < target){
left = middle + 1;}
else{
return middle;}
}
return -1;
}
};
● 自己实现过程中遇到哪些困难
设置middle的时候,为了防止溢出,设置复杂一点,不小心总搞错括号。
● 今日收获,记录一下自己的学习时长
1h
27.移除元素
● 今日学习的文章链接和视频链接
文章:代码随想录
视频:数组中移除元素并不容易! | LeetCode:27. 移除元素_哔哩哔哩_bilibili
● 自己看到题目的第一想法
把后面元素往前移。使用两个for循环。(但不太会写)
● 看完代码随想录之后的想法
两种方法。两个for循环或者双指针。(发现双指针更好写,暴力的更复杂)
两个for:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int size = nums.size();
for(int i = 0;i<size;i++){
if(nums[i]==val){
for(int j = i+1;j<size;j++){
nums[j-1]=nums[j];
}
i--;
size--;
}
}
return size;
}
};
双指针:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int write = 0;
for(int read = 0; read < nums.size(); read++){
if(nums[read] != val){
nums[write++] = nums[read];
}
}
return write;
}
};
● 自己实现过程中遇到哪些困难
无。看视频较容易理解。
● 今日收获,记录一下自己的学习时长
0.5h
● 今日学习的文章链接和视频链接
● 自己看到题目的第一想法
只知道是排序,但不知道用啥排序,也不会写。。
● 看完代码随想录之后的想法
双指针真好用。
还得去巩固一下快排,,都忘了复杂度为什么是nlogn了。
这个就记双指针吧。
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;
}
};
● 自己实现过程中遇到哪些困难
对vector不熟悉,需要用vector新创建一个数组。
其他要注意的就是for循环中i的取值范围。
● 今日收获,记录一下自己的学习时长
0.5h