数组
加入快慢指针,快指针出现与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++){//i表示窗口的第一数值下标
int sum = 0;
for(int j=i;j<nums.size();j++){//通过j的增加来扩大窗口大小
sum+=nums[j];
if(sum>=target){
int sublen = j-i+1;
len = len==0?sublen:len;//首先要考虑当前的长度是否为0
len = len<sublen?len:sublen;//可能在前面已经出现相等的情况,但是后面可能更短
break;//当出现大于target,窗口则不需要增大
}
}
}
return len;
}
直接构建二维数组来解决,主要考虑每次一圈后,一行一列还剩多少空格
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++;//y表示第几列
}
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;//当n为奇数时,中心点需要单独赋值
return res;
}
};