代码随想录算法训练营day2 | 977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵II

977.有序数组的平方

classSolution{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;}};

209.长度最小的子数组

classSolution{public:intminSubArrayLen(int s, vector<int>& nums){int result = INT32_MAX;int sum =0;// 滑动窗口数值之和int i =0;// 滑动窗口起始位置int subLength =0;// 滑动窗口的长度for(int j =0; j < nums.size(); j++){
            sum += nums[j];// 注意这里使用while,每次更新 i(起始位置),并不断比较子序列是否符合条件while(sum >= s){
                subLength =(j - i +1);// 取子序列的长度
                result = result < subLength ? result : subLength;
                sum -= nums[i++];// 这里体现出滑动窗口的精髓之处,不断变更i(子序列的起始位置)}}// 如果result没有被赋值的话,就返回0,说明没有符合条件的子序列return result == INT32_MAX ?0: result;}};

59.螺旋矩阵II

classSolution{public:
    vector<vector<int>>generateMatrix(int n){
        vector<vector<int>>res(n,vector<int>(n,0));// 使用vector定义一个二维数组int startx =0, starty =0;// 定义每循环一个圈的起始位置int loop = n /2;// 每个圈循环几次,例如n为奇数3,那么loop = 1 只是循环一圈,矩阵中间的值需要单独处理int mid = n /2;// 矩阵中间的位置,例如:n为3, 中间的位置就是(1,1),n为5,中间位置为(2, 2)int count =1;// 用来给矩阵中每一个空格赋值int offset =1;// 需要控制每一条边遍历的长度,每次循环右边界收缩一位int i,j;while(loop --){
            i = startx;
            j = starty;// 下面开始的四个for就是模拟转了一圈// 模拟填充上行从左到右(左闭右开)for(j = starty; j < n - offset; j++){
                res[startx][j]= count++;}// 模拟填充右列从上到下(左闭右开)for(i = startx; i < n - offset; i++){
                res[i][j]= count++;}// 模拟填充下行从右到左(左闭右开)for(; j > starty; j--){
                res[i][j]= count++;}// 模拟填充左列从下到上(左闭右开)for(; i > startx; i--){
                res[i][j]= count++;}// 第二圈开始的时候,起始位置要各自加1, 例如:第一圈起始位置是(0, 0),第二圈起始位置是(1, 1)
            startx++;
            starty++;// offset 控制每一圈里每一条边遍历的长度
            offset +=1;}// 如果n为奇数的话,需要单独给矩阵最中间的位置赋值if(n %2){
            res[mid][mid]= count;}return res;}};

感受:

写代码的过程中还存在细节方面的问题,有些函数没记住,导致写的过程比较慢,还得多练习

明天复习一下继续加油

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值