有序数的平方和
题目要求:
(1)螺旋矩阵:将数字n放入螺旋数组中,按照顺时针顺序螺旋排列的正方形矩阵。核心要点在于考虑边界的一致性,防止因边界的问题导致出错,为了能做成一个正方形,只能是加头不加尾。
(2)将一个有序数组的平方按照从小到大排位一个有序数组,因为数组内有负数,所以可能影响整个有序数组的序列。主要依赖于有序数组的特性,因为本身是有序数组,但可能存在负数,因此每一步的最大值主要存在于数组的头部或者尾部,因此只需比较头部与尾部内容即可。
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> res(nums.size());//创建一个新的数组容器,用与存放返回的结果
int k=nums.size()-1;//新数组的值,因为数组要求从小到大,所以该值应该从大到小
for(int i=0,j=nums.size()-1;i<=j;){//i为原始组中需要比较的左侧的值,j为原始数组中需要比较的右侧的值,终止条件为两值相等的时候才行
if(nums[i]*nums[i]<=nums[j]*nums[j]){
res[k]=nums[j]*nums[j];
j--;
k--;
}
else{
res[k]=nums[i]*nums[i];
i++;
k--;
}
}
return res;
}
};
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> res(n,vector<int>(n,0));
int startx,starty=0;
int loop=n/2;
int mid=n/2;//如果是奇数最终需要单独计数一次
int count=1;//计数器
int offest=1;//边界值,每次循环右边收缩一
int i,j;
while(loop--){
i=startx;//每轮开始需要计数需要考虑,
j=starty;
for(j=starty;j<n-offest;j++){//
res[startx][j]=count++;
}
for(i=startx;i<n-offest;i++){
res[i][j]=count++;
}
for(;j>starty;j--){
res[i][j]=count++;
}
for(;i>startx;i--){
res[i][j]=count++;
}
startx++;
starty++;
offest+=1;
}
if(n%2){
res[mid][mid]=count;
}
return res;
}
};```