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

今天是第二天,第一道题很简单, 977. 有序数组的平方

先复习了一下冒泡排序,结果超时了

class Solution {
public:
    vector sortedSquares(vector& nums) {
        for(int i=0;inums[j+1]){
                    int temp=nums[j];
                    nums[j]=nums[j+1];
                    nums[j+1]=temp;
                }
                
            }
        }
        return nums;

    }
};

 使用双指针另造数组排序

class Solution {
public:
    vector sortedSquares(vector& nums) {
        int low=0;
        int high=nums.size()-1;
        int key=high;
        vectorA(high+1,0);
        while(key>=0){
            
            if(nums[low]*nums[low]

209. 长度最小的子数组

这题较难,一开始看着滑动窗口几个字写了如下代码,但是实际上效果与暴力解是一模一样的

class Solution {
public:
    int minSubArrayLen(int target, vector& nums) {
        int Index=0;
        int highIndex=0;
        int the=nums.size();
        int sum=0;
        int key=0;
        while(highIndex

与真正滑动串口的区别是,真实的滑动窗口不需要每次都重新算窗口内的值,只是在sum中进行移除与增加

class Solution {
public:
    int minSubArrayLen(int target, vector& nums) {
        
        int the=nums.size()+1;
        int sum=0;
        int j=0;
        for(int Index=0;Index=target){
                if(the>Index-j+1){
                    the=Index-j+1;
                }
                sum-=nums[j++];

            }
        }
      
        return the!=nums.size()+1?the:0;
       

    }
};

59. 螺旋矩阵 II

主要是数学思路,要n/2圈,最后一个空单独弄,四条边各一个for,注意区间。还有每一圈的开始和结束需要一个标识符。

class Solution {
public:
    vector> generateMatrix(int n) {
        
        vector>the(n,vector(n,0));
        int x=0;
        int round=n/2;
        int mid=n/2;
        int num=1;
        int j=0,i=0;
        while(round--){
            for(j=x;jx;j--){
                the[i][j]=num++;
            }
            for(;i>x;i--){
                the[i][j]=num++;
            }
            x++;
        }
        if(n%2!=0)
        the[mid][mid]=n*n;
        return the;
     

    }
    
};

你可能感兴趣的:(算法,数据结构,leetcode)