977.有序数组的平方:https://leetcode.cn/problems/squares-of-a-sorted-array/
//暴力法
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
for (int i = 0; i < nums.size(); i++)
{
nums[i] = nums[i]*nums[i];
}
sort(nums.begin(), nums.end());
return nums;
}
};
//双指针法
因为本题是采用升序的数组,故可从两端来进行判断,谁大就先进数组
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int slowpoint = 0;
int fastpoint = nums.size() - 1;
vector<int>result(nums.size());
for (int solve = nums.size() - 1; solve >= 0; solve--)
{
int b = nums[fastpoint] * nums[fastpoint];
int a = nums[slowpoint] * nums[slowpoint];
if (a < b)
{
result[solve] = b;
fastpoint--;
}
else if (a >= b)
{
result[solve] = a;
slowpoint++;
}
}
return result;
}
};
209.长度最小数组:https://leetcode.cn/problems/minimum-size-subarray-sum/
总结:本题可以采用暴力解法也可以采用滑动窗口法,收获就是如何确定窗口的起始位置与终止位置
59.螺旋矩阵:https://leetcode.cn/problems/spiral-matrix-ii/
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>>result(n,vector<int>(n,0));//对二维数组进行大小定义
//对每一行,然后旋转的进行数组的读取,然后再对行与列进行分别消除
//总共需要插入n次
int i = 0;//代表螺旋矩阵的行
int j = 0;//代表螺旋矩阵的列
int a = n;//代表行列相减
int b = n;
int mid = n / 2;//计算中间位置
int loop = n / 2;//计算出循环次数
int accout = 1;
int offest = 1;
int x = 0;
int y = 0;
while (loop--)//循环几圈
{
i = x;
j = y;
for (j; j < a- offest; j++)//从左到右进行相加
{
result[i][j] = accout;
accout++;
}
for (i; i < b - offest; i++)//右边从上到下相加
{
result[i][j] = accout++;
}
for (j; j > x; j--)
{
result[i][j] = accout++;
}
for (i; i > y; i--)
{
result[i][j] = accout++;
}
x++;//一圈循环完毕之后,x和y都要加1,以便向内圈开始循环
y++;
offest += 1;//一圈循环完毕之后,总的n要减一
}
if (n % 2)
result[mid][mid] = accout;
return result;
}
};
总结:看题解,mid和loop的求解,不看题解,根本不知道这样去写,也就是不知道如何进入循环,自己知道从上到下,一个一个遍历来进行插值
还有n%2这里,来判断是否是奇数列,中心位置还要单独考虑。