当前位置: 首页 > article >正文

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

977. 有序数组的平方

双指针,新数组用k;

由于已经排序,所以比较两侧数据即可;

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        vector<int> ans(nums.size());
        int k = nums.size()-1;
        int left = 0;
        int right = nums.size()-1;
        while(left<=right)
        {
            if(nums[left]*nums[left] > nums[right]*nums[right])
            {
                ans[k] = nums[left]*nums[left];
                
                left++;
            }
            else
            {
                ans[k] = nums[right]*nums[right];
                
                right--;
            }
            k--;
        }

        return ans;
    }
};

209. 长度最小的子数组

这道题需要注意的就是用while循环,使得sum减小到小于target,一次可能不够;

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int slowindex = 0;
        int fastindex = 0;
        int sum = 0;
        int minlen = INT_MAX;
        for(;fastindex<nums.size();++fastindex)
        {
            sum += nums[fastindex];
            while(sum>=target)
            {
                minlen = min(minlen, fastindex-slowindex+1);
                sum-=nums[slowindex];
                slowindex++;
            }
        }
        return minlen == INT_MAX? 0:minlen;
    }
};

59. 螺旋矩阵 II

设置四个边界,然后对边界不断缩小,注意边界换的变量要对之前不变的变量进行增减;比如t在第一个遍历中是不变量,第二个遍历中作为变量,就要在此之前++;

class Solution
{
public:
    vector<vector<int>> generateMatrix(int n)
    {
        vector<vector<int>> mat(n, vector<int>(n)); 
        int l = 0; int r = n-1; int t = 0;int b = n-1;
        int tar = n*n; int num = 1;
        while(num<=tar)
        {
            for(int i=l;i<=r;++i) mat[t][i] = num++;
            t++;
            for(int i=t;i<=b;++i) mat[i][r] = num++;
            r--;
            for(int i=r;i>=l;--i) mat[b][i] = num++;
            b--;
            for(int i=b;i>=t;--i) mat[i][l] = num++;
            l++;
        }
        return mat;
    }
};


http://www.kler.cn/a/505032.html

相关文章:

  • 一体机cell服务器更换内存步骤
  • C语言数据结构与算法(排序)详细版
  • 【大模型系列篇】数字人音唇同步模型——腾讯开源MuseTalk
  • mac 安装docker
  • Spring Boot教程之五十六:用 Apache Kafka 消费 JSON 消息
  • [微服务]redis数据结构
  • 裸金属服务器和虚拟机之间的区别
  • CentOS 9 Stream 中查看 Python 版本并升级 Python
  • react中hooks之useRef 用法总结
  • Hadoop3.3.4伪分布式环境搭建
  • 《Vue3实战教程》34:Vue3状态管理
  • 大数据学习(33)-spark-transformation算子
  • Android BitmapShader更简易的实现刮刮乐功能,Kotlin
  • 计算机二级-Java系列(Java的特点)
  • nodejs后端ws与http结合共享一个服务器,前端websocket发送信息后端ws接收信息,使用Map定型数组设置ID
  • rust调用DLL或lib
  • Redis 缓存穿透、击穿、雪崩 的区别与解决方案
  • 微软组建新内部 AI 研发组织:开启智能创新新篇章
  • GPT-SoVITS学习01
  • UDP、TCP特性
  • CasaOS小主机如何部署1Panel面板并实现远程管理服务器超实用教程
  • ubuntu 配置OpenOCD与RT-RT-thread环境的记录
  • 海康大数据面试题及参考答案
  • 【后端面试总结】Golang可能的内存泄漏场景及应对策略
  • Hessian矩阵 通过符号计算解析 Hessian 矩阵
  • 手机与平板:勒索软件的“天然通道”