977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

发布时间 2023-12-01 18:27:37作者: 晴夜空
977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

 

977.有序数组的平方

思路:

分别 从 数组 的 左 , 右 向 另一侧 / 中间 趋近,

新 建立 一个 数组 接收 (有序 序列) (动态 地 在 过程 中 接收 数据)

 

 

拓展 为 各个 任务 分配 工作 指针 , 形成 多指针

有序 数字 序列 ,使用 双指针 从 两侧 趋近 , 可以 有效 地 转化 为 绝对值 序列 , (从 放置 “大” 绝对值 得 位置 开始 写入 (可以 是 从右往左))

 

vector<int> sortedSquares(vector<int>& nums) {
       int len = end(nums) - begin(nums);

       int i = 0;
       int j = len - 1 ;
       int k = len - 1;

       vector<int> TempReceive(len,0);

       int Temp_Cache_Left = nums[i]*nums[i];
       int Temp_Cache_Right = nums[j]*nums[j];

       while(i <= j)
      {


           //内循环
           if((Temp_Cache_Left) >= (Temp_Cache_Right)       )         // 基础逻辑 与 代码 优化          
          {
               TempReceive[k] = Temp_Cache_Left;
               k--;
               i++;
               if(i < len)         //防 溢出
              {  
                   Temp_Cache_Left = nums[i]*nums[i];
              }

          }
           else
          {
               TempReceive[k] = Temp_Cache_Right;
               k--;
               j--;

               if(j >= 0 )
              {
                   Temp_Cache_Right = nums[j]*nums[j];
              }

          }

      }


       return TempReceive;

  }

 

 

时间 吃紧 , 先把 练习 代码 贴上 , 随后 补充 细节 / 思路 , “解题” 时 的 情况 / 环境 , 总结

 

 

59.螺旋矩阵II
vector<vector<int>> generateMatrix(int n) {
       // n   “ 边长 ”

       int count = 0;

       int i = 0;
       int j = 0;

       int k = 0;

       int len_Edge = n;

       vector<vector<int>> CacheSpiralMatrix(n , vector<int>(n , 0));

       //内循环

       // 注意 螺旋 矩阵 的 结构

       // 区分 奇偶 情况

       if((n % 2) == 0 )
      {
           while(len_Edge > 0)
          {
               for(k = 0 ; k < (len_Edge-1) ; k++ )
              {
                   count++;
                   CacheSpiralMatrix[i][j] = count;
                   j++;
              }

               for(k = 0 ; k < (len_Edge-1) ; k++ )
              {
                   count++;
                   CacheSpiralMatrix[i][j] = count;
                   i++;
              }

               for(k = 0 ; k < (len_Edge-1) ; k++ )
              {
                   count++;
                   CacheSpiralMatrix[i][j] = count;
                   j--;
              }

               for(k = 0 ; k < (len_Edge-1) ; k++ )
              {
                   count++;
                   CacheSpiralMatrix[i][j] = count;
                   i--;
              }

               i++;
               j++;

               len_Edge -= 2 ;          //len_Edge = len_Edge - 2;

          }
      }
       else
      {
           while(len_Edge > 1)
          {
               for(k = 0 ; k < (len_Edge-1) ; k++ )
              {
                   count++;
                   CacheSpiralMatrix[i][j] = count;
                   j++;
              }

               for(k = 0 ; k < (len_Edge-1) ; k++ )
              {
                   count++;
                   CacheSpiralMatrix[i][j] = count;
                   i++;
              }

               for(k = 0 ; k < (len_Edge-1) ; k++ )
              {
                   count++;
                   CacheSpiralMatrix[i][j] = count;
                   j--;
              }

               for(k = 0 ; k < (len_Edge-1) ; k++ )
              {
                   count++;
                   CacheSpiralMatrix[i][j] = count;
                   i--;
              }

               i++;
               j++;

               len_Edge -= 2 ;          //len_Edge = len_Edge - 2;

          }

           // “ len_Edge == 1 时 ”

           count++;
           CacheSpiralMatrix[i][j] = count;

      }




       return CacheSpiralMatrix;




  }