数组
代码随想录 移除元素
加入快慢指针,快指针出现与target相同,慢指针跳过
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int len = 0;
for(int i=0;i<nums.size();i++){
if(nums[i]!=val){
nums[len++]=nums[i];
}
}
return len;
}
};
长度最小的数组
不能直接进行排序,因为这个要求连续,因此需要引入滑动窗口
int minSubArray(int target,vector<int>&nums){
int len = 0;
for(int i=0;i<nums.size();i++){
int sum = 0;
for(int j=i;j<nums.size();j++){
sum+=nums[j];
if(sum>=target){
int sublen = j-i+1;
len = len==0?sublen:len;
len = len<sublen?len:sublen;
break;
}
}
}
return len;
}
螺旋矩阵 II
直接构建二维数组来解决,主要考虑每次一圈后,一行一列还剩多少空格
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>>res(n,vector<int>(n,0));
int startx=0,starty=0;
int loop = n>>1;
int mid = n/2;
int count = 1;
int offset = 1;
int i,j;
while(loop--)
{
i = startx;
j = starty;
for(;j<n-offset;j++){
res[startx][j]=count++;
}
for(;i<n-offset;i++){
res[i][j]=count++;
}
for(;j>starty;j--){
res[i][j]=count++;
}
for(;i>startx;i--) res[i][j]=count++;
startx++;
starty++;
offset += 1;
}
if(n%2) res[mid][mid]=count;
return res;
}
};
|