代码随想录算法刷题训练营

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

LeetCode(977) 有序数组的平方

import java.util.Arrays;

class Solution {
    public int[] sortedSquares(int[] nums) {
        for (int nums2 = 0; nums2 < nums.length; nums2++) {
            nums[nums2]=nums[nums2]*nums[nums2];
        }
        Arrays.sort(nums);//调用数组排序方法
        //常规冒泡排序方法和选择排序方法
        return nums;

    }
}

LeetCode(209) 长度最小的子数组

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int count=nums.length;
        int sum=0;
        for (int i = 0; i < nums.length; i++) {
            if(target<=nums[i]){
                return 1;
            }
            sum+=nums[i];    
        }
        if(sum<target){
            return 0;
        }
        //利用双指针滑动窗口解题:你定一个位置,使我到达你哪里达到最小值
        int i=0;
        int sum1=0;
       for (int j = 0; j < nums.length; j++) {
           sum1+=nums[j];
           while (sum1>=target) {
            int countflag=j-i+1;
            count=(count<countflag?count:countflag);
            sum1-=nums[i++];  
           } 
       }
        return count;
    }
}

LeetCode(59) 螺旋矩阵II

class Solution {
    public int[][] generateMatrix(int n) {
        int startX=0;
        int startY=0;
        int flag=1;
        int count=1;
        int arr[][]=new int[n][n];
        for (int i = 0; i < n/2; i++) {//通过i去控制外圈数
            //遵循左闭右开,转个完整的圈
            for(int j1=startY;j1<n-flag;j1++){
                arr[startX][j1]=count++;
            }
            for(int i1=startX;i1<n-flag;i1++){
                arr[i1][n-flag]=count++;
            }
            for(int j2=n-flag;j2>i;j2--){
                arr[n-flag][j2]=count++;
            }
            for(int i2=n-flag;i2>i;i2--){
                arr[i2][i]=count++;
            }
            startX++;
            startY++;
            flag++;    
        }
        if(n%2!=0){
            arr[n/2][n/2]=count;
        }

    return arr;
    }
}

你可能感兴趣的:(代码随想录算法训练营,算法)