题目链接:977. 有序数组的平方
题目描述:给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
代码实现:
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int k = nums.size() - 1;
vector<int> ans(nums.size(), 0);
for (int i = 0, j = nums.size() - 1; i <= j;) {
if (nums[i] * nums[i] < nums[j] * nums[j]) {
ans[k] = nums[j] * nums[j];
k--;
j--;
} else {
ans[k] = nums[i] * nums[i];
k--;
i++;
}
}
return ans;
}
};
题目链接:209. 长度最小的子数组
题目描述:给定一个含有 n
个正整数的数组和一个正整数 target
。
找出该数组中满足其总和大于等于 target
的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
代码实现:
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int ans = INT32_MAX;
int sum = 0;
int i = 0;
int sublength = 0;
for (int j = 0; j < nums.size(); ++j) {
sum += nums[j];
while (sum >= target) {
sublength = (j - i + 1);
ans = ans < sublength ? ans : sublength;
sum -= nums[i];
i++;
}
}
return ans == INT32_MAX ? 0 : ans;
}
};
题目链接:59.螺旋矩阵
题目描述:给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
代码实现:
lass Solution {
public:
vector<vector<int>> generateMatrix(int n) {
int num = 1;
int left = 0, top = 0, right = n - 1, bottom = n - 1;
vector<vector<int>> ans(n, vector<int>(n));
while (num <= n * n) {
for (int i = left; i <= right; ++i) {
ans[top][i] = num++;
}
++top;
for (int i = top; i <= bottom; ++i) {
ans[i][right] = num++;
}
--right;
for (int i = right; i >= left; --i) {
ans[bottom][i] = num++;
}
--bottom;
for (int i = bottom; i >=top; --i) {
ans[i][left] = num++;
}
++left;
}
return ans;
}
};
总结:这几道题目之前刷过,这次做出来速度比之前有所提高,对双指针有更深刻的理解;第三道题模拟还不是很熟悉,关于边界的设定还需要再进行强化。