题目977. 有序数组的平方 - 力扣(LeetCode)
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int left=0;
int right=nums.size()-1;
vector<int> result(nums.size(),0);
int i=right;
while(left<=right)
{
if(nums[left]*nums[left]>nums[right]*nums[right])
{
result[i--]=nums[left]*nums[left];
left++;
}else
{
result[i--]=nums[right]*nums[right];
right--;
}
}
return result;
}
};
题目209. 长度最小的子数组 - 力扣(LeetCode)
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int left=0;//滑动窗口起始位置
int right=0;//滑动窗口结束位置
int arrylen=0;//滑动窗口大小
int sum=0;//目前滑动窗口总和
int result=INT32_MAX;//返回值
while(right<nums.size())
{
//滑动窗口结束位置的移动
sum+=nums[right++];
while(sum>=target)//如果sum大于target,先记录长度,再移动滑动窗口起始位置,一直检查到不满足这个条件,再移动滑动窗口结束位置
{
arrylen=right-left;//注意长度计算
result=result>arrylen?arrylen:result;//长度最小的数组,要和上次记录满足条件的数字比较,最小的那个就是需要的
sum-=nums[left++];
}
}
//判断是不是没有符合条件的子数组,如果没有返回0
return (result==INT32_MAX)?0:result;
}
};
题目59. 螺旋矩阵 II - 力扣(LeetCode)
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
int len = n - 1; // 每次填数字的单边长度
vector<int> vec(n, 0);
vector<vector<int>> res;
int j = 0;
while (j++ < n) {
res.push_back(vec);
}
// 开始填充
int x = 0;
int y = 0;
int i = 1; // i要填充的数组
int loop = n / 2; // 旋转填充的次数,n为基数中间单独处理
while (loop--) {
// 从左到右
for (x; x < len; x++) {
res[y][x] = i++;
}
// 从上到下
for (y; y < len; y++) {
res[y][x] = i++;
}
// 从右到左
for (x; x > n - len - 1; x--) {
res[y][x] = i++;
}
// 从下到上
for (y; y > n - len - 1; y--) {
res[y][x] = i++;
}
x++;
y++;
len--;
}
// 注意:如果n为奇数,需要给最中间单独赋值
int mid = n / 2;
if (n % 2 == 1) {
res[mid][mid] = i;
}
return res;
}
};
最后
学习了滑动窗口,这个要再多练习一下,不是很熟练,,需要熟练掌握双指针,还有对左闭右开区间要熟悉,螺旋矩阵可以多练练,,加油!!