数组part2
一、977-有序数组的平方
平方后,最大的数在两边
双指针
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int high = nums.size() - 1;
vector<int>result(nums.size(), 0);
for(int i = 0, j = nums.size() - 1; i <= j; ){
if(nums[i] * nums[i] > nums[j] * nums[j]){
result[high--] = nums[i] * nums[i];
i++;
}
else{
result[high--] = nums[j] * nums[j];
j--;
}
}
return result;
}
};
二、209-长度最小的子数组
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int result = INT_MAX;
int sum = 0;
int left = 0;
for(int right = 0; right < nums.size(); right++){
sum += nums[right];
while(sum >= target){
result = min(result, right - left + 1);
sum -= nums[left++];
}
}
return result == INT_MAX ? 0 : result;
}
};
三、59-螺旋矩阵2
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> result(n, vector<int> (n, 0));
int num = 1;
int startRow = 0, endRow = n - 1;
int startCol = 0, endCol = n - 1;
while(startRow <= endRow && startCol <= endCol){
for (int j = startCol; j <= endCol; j++)
result[startRow][j] = num++;
for (int i = startRow + 1; i <= endRow; i++)
result[i][endCol] = num++;
for (int j = endCol - 1; j >= startCol; j--)
result[endRow][j] = num++;
for (int i = endRow - 1; i > startRow; i--)
result[i][startCol] = num++;
startRow++;
startCol++;
endRow--;
endCol--;
}
return result;
}
};
总结
数组byebye