有序数组的平方没有自己做,看懂了就搬过来了
class Solution {
public:
vector<int> sortedSquares(vector<int>& A) {
int k = A.size() - 1;
vector<int> result(A.size(), 0);
for (int i = 0, j = A.size() - 1; i <= j;) { // 注意这里要i <= j,因为最后要处理两个元素
if (A[i] * A[i] < A[j] * A[j]) {
result[k--] = A[j] * A[j];
j--;
}
else {
result[k--] = A[i] * A[i];
i++;
}
}
return result;
}
};
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int i=0,j=0;
int sum = 0;
int minLen = INT_MAX;
while(j<nums.size())//主要看元素被操作的次数
{
sum += nums[j];
while(sum >= target)
{
minLen = minLen > j-i+1 ? j-i+1:minLen;
sum -= nums[i++];
}
++j;
}
return minLen < INT_MAX ? minLen : 0;
}
};
先要回想一下二维方向向量的旋转公式:
通过向量(dx,dy),顺时针旋转90°---> 得到(dy,-dx),可根据上述的旋转矩阵代入角度为-90计算得到
编译器:负数取余运算考虑分子符号即可
参考概念:负数取余
第一版:(参考了力扣题的评论)
注:加入n取模是为了防止出现负数时,数组越界的问题,eg:y+dy就会出现<0的情况
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> temp(n,vector<int>(n,0));
int dx=0,dy=1;//默认初始的方向向量
int x=0,y=0;
for(int i=1;i<=n*n;++i)
{
temp[x][y] = i;
if(temp[(x+dx+n)%n][(y+dy+n)%n] != 0)//判断加入方向向量后取模后是否回到了开头,回到开头表示要转弯了
{
//重置方向向量
int tmp = dy;
dy = -dx;
dx = tmp;
}
x += dx;
y += dy;
}
return temp;
}
};
class Solution {
public:
int totalFruit(vector<int>& fruits) {
}
};