# Leetcode 977 有序数组的平方#
题目链接:有序数组的平方
解题思路:本题仍是使用双指针法,不过这次使用三个指针。由于元数组是递增的,两端的符号可能不同,则仅需在两端方两个指针,分别计算平方,较大者放入目标数组,然后该指针向里移动,以此类推。这一题原始想法是找到中间符号的分界点,然后分成两块再使用类似双指针的方法,但比较麻烦,不如直接从两端开始。一下投放代码:
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int i=0,j=nums.size()-1;
vector<int> res(nums.size(),0);
int k = nums.size()-1;
while(i<=j)
{
if(nums[i] * nums[i] < nums[j]* nums[j])
res[k--] = nums[j] * nums[j--];
else
res[k--] = nums[i] * nums[i++];
}
return res;
}
};
#Leetcode209 最小长度子数组#
题目:最小长度子数组
方法:滑动窗口
即两个指针,分别移动,在里面去找到一个最小的符合题意的数组的长度。
注意:for(int j = 0;j<n;j++)中的j是终止位置!!
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int res = nums.size()+1,sum= 0;
int left=0,right = 0,len = nums.size();
for(;right<len;right++){
sum+=nums[right];
while(sum>=target){
sum-=nums[left];
int lenth = right - left + 1;
res = res>lenth?lenth:res;
left++;
}
}
if(res <= len)
return res;
else
return 0;
}
};
#Leetcode 59 螺旋数组#
题目:螺旋数组
本题就强调一点:循环代码中要保证变量一致性!是的逻辑可复制
本题更考验基本功,在敲代码是要胆大心细!
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
int rol = 0,col = 0;
int offset = 1,count = 1;
int loop = n/ 2;
int i,j;
vector<vector<int>> nums(n,vector<int>(n,0));
while(loop--){
i = rol;
j = col;
for(j = col;j<n-offset;j++)
nums[rol][j] = count++;
for(i = rol;i<n-offset;i++)
nums[i][j] = count++;
for(;j>col;j--)
nums[i][j] = count++;
for(;i>rol;i--)
nums[i][j] = count++;
rol++;
col++;
offset++;
}
if(n %2 != 0)
nums[n/2][n/2] = count;
return nums;
}
};
本题还有变种,我在南大数据结构课堂竞赛中所遇到,比本题更为麻烦一点。明日将那一题和数组部分的总结一并写出来,太晚了,睡觉!