977.有序数组的平方
方法一
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> ans;
for (int num: nums) {
ans.push_back(num * num);
}
sort(ans.begin(), ans.end());
return ans;
}
};
方法二:开辟额外数组,利用两边的双指针缩进,比较大小填入新数组
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int n = nums.size();
vector<int> ans(n);
for (int i = 0, j = n - 1, pos = n - 1; i <= j;) {
if (nums[i] * nums[i] > nums[j] * nums[j]) {
ans[pos] = nums[i] * nums[i];
++i;
}
else {
ans[pos] = nums[j] * nums[j];
--j;
}
--pos;
}
return ans;
}
};
209. 长度最小的子数组
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int slow=0;
int fast=0;
int count =0;
int size=0;
int maxsize=INT_MAX;
for(slow,fast;fast<nums.size();fast++){
count+=nums[fast];
size++;
while(count>=target){
if(size<maxsize){
maxsize=size;
}
count-=nums[slow];
size--;
slow++;
}
}
return maxsize!=INT_MAX?maxsize:0;
}
};
59. 螺旋矩阵 II
最好自己在纸上把过程都模拟一下
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>>res(n,vector<int>(n,0));
//loop圈数
int loop=n/2;
//起始位置
int startx=0;
int starty=0;
//计数
int count=1;
//每圈中一行或者一列走的步长,每回合减2
int index=n-1;
while(loop--){
for(int i=0;i<index;i++){
res[starty][startx++]=count++;
}
for(int i=0;i<index;i++){
res[starty++][startx]=count++;
}
for(int i=0;i<index;i++){
res[starty][startx--]=count++;
}
for(int i=0;i<index;i++){
res[starty--][startx]=count++;
}
startx++;
starty++;
index-=2;
}
//当n圈是奇数圈时给中心赋值
if(n%2==1)res[starty][startx]=count;
return res;
}
};
1020. 飞地的数量
class Solution {
int index[4][2]={
-1, 0, 0, -1, 1, 0, 0, 1};
int res=0;
int coount=0;
bool flag=false;//是否挨着边界
void dfs(vector<vector<int>>& grid,vector<vector<bool>>&visited,int x,int y){
coount++;
for(int i=0;i<4;i++){
int startx=x+index[i][0];
int starty=y+index[i][1];
if(startx<0||startx>=grid.size()||starty<0||starty>=grid[0].size())
{
flag=true;
continue;
}
if(grid[startx][starty]==1&&visited[startx][starty]==false){
visited[startx][starty]=true;
dfs(grid,visited,startx,starty);
}
}
}
public:
int numEnclaves(vector<vector<int>>& grid) {
vector<vector<bool>>visited(grid.size(),vector<bool>(grid[0].size(),false));
for(int i=0;i<grid.size();i++){
for(int j=0;j<grid[0].size();j++){
if(grid[i][j]==1&&visited[i][j]==false){
flag=false;
visited[i][j]=true;
coount=0;
dfs(grid,visited,i,j);
if(flag==false)res+=coount;
}
}
}
return res;
}
};