有序数组的平方|大于某一个数的最短数组|螺旋矩阵【双指针的的应用】

class Solution {
public:
    vector sortedSquares(vector& nums) {
        int n = nums.size();
        int index = n - 1;
        vector result(n);
        int right = 0;
        int left = 0;
        for (left = 0, right = n - 1; left <= right;) {
            if (nums[left] < 0) {
                nums[left] = -nums[left];
            }
            if (nums[left] >= nums[right]) {
                result[index--] = nums[left] * nums[left];
                left++;
            } else {
                result[index--] = nums[right] * nums[right];
                right--;
            }
        }

        return result;
    }
};

这个双指针方法不用判断复杂的边界条件。是非常好的一种方法。

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

 时间复杂度为O(n),思路是: 利用上一次计算的sum的值,以及记录上一次j的值 

class Solution {
public:
    vector> generateMatrix(int n) {
     vector>result(n,vector(n));
     int left,right;
     left=right=0;
     int offset=1;
     int count=1;
     int num=n/2;
     int i;
     int j;
     while(num--)
     {
     for( i=left;ileft;i--)
    {
        result[j][i]=count++;
    }
    for(;j>right;j--)
    {
        result[j][i]=count++;
    }
    offset++;
    left++;
    right++;
    }
    if(n%2!=0)
    {
        result[n/2][n/2]=n*n;
    }
       return   result;
    }
   
};

   螺旋矩阵,注意固定变量   左闭右开   四个边全是左闭右开

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