一:LeetCode977.有序数组的平方
   
    1:题目描述(
    
     977.有序数组的平方
    
    )
   
    给你一个按
    
     非递减顺序
    
    排序的整数数组
    
     nums
    
    ,返回
    
     每个数字的平方
    
    组成的新数组,要求也按
    
     非递减顺序
    
    排序。
     
   
    2:解题思路
   
    
     解法一:暴力解法:
    
   
先遍历数组,对元素进行平方,再对数组进行排序
class Solution:
    def sortedSquares(self, nums):
        # 暴力解法:先进行平方,再进行排序
        for i in range(len(nums)):
            nums[i] = nums[i] * nums[i]
        nums.sort()
        return nums
    
     解法二:使用双指针
    
   
定义两个指针,分别指向数组的一头一尾;
定义一个新的数组,长度与原始数组保持一致,元素的初始值均置为0;
然后对比两个指针所指向值的平方后的大小,将较大平方值,从后往前替换掉新数组的值。
    
     代码展示:
    
   
class Solution:
    def sortedSquares(self, nums):
        # 双指针解法
        # 定义两个指针,分别指向数组的一头一尾,在定义一个新数组,比较两个指针对应的值,将较大的值从新数组的后面往前进行替换
        n = len(nums)
        res = [0] * n
        left, right, size = 0, n-1, n-1       # size代表数组res当前指向的位置
        while left <= right:
            if nums[left]*nums[left] >= nums[right]*nums[right]:
                res[size] = nums[left]*nums[left]
                left += 1
                size -= 1
            else:
                res[size] = nums[right]*nums[right]
                right -= 1
                size -= 1
        return res
    二、LeetCode209.长度最小的子数组
   
    1:题目描述(
    
     209.长度最小的子数组
    
    )
   
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
     
   
    2:解题思路
   
首先定义一个无穷大的数res_len,一个求和的变量Sum以及子数组的起始位置index;
遍历数组,将当前遍历的值与Sum进行求和,
判断求和后的结果是否大于等于目标值target,满足条件,获取满足条件的子数组长度,然后求res_len和满足条件的子数组的长度的最小值,找到满足条件的子数组后,我们需要将子数组起始位置的值从Sum中减去,并将子数组的起始位置index向右移动一位,进行循环判断是否满足条件,不满足条件了,继续遍历数组,直到数组遍历结束。
    
     代码展示:
    
   
class Solution:
    def minSubArrayLen(self, target, nums):
        # 初始化满足条件的长度,初始化为最大值
        res = float("inf")
        # 初始化满足条件的元素之和,初始化为0
        Sum = 0
        # 初始化起始位置,初始化为第一个元素的下标
        index = 0
        # 遍历数组
        for i in range(len(nums)):
            # 求和,与当前遍历的值
            Sum += nums[i]
            # 判断当前元素之和,是否大于等于目标值target
            while Sum>= target:
                # 当前元素之和大于等于目标值,更新res的值,取当前res和当前遍历到的元素下标与index之间的长度中的最小值
                res = min(res, i-index+1)
                # 减去起始位置的元素
                Sum -= nums[index]
                # 向右移动起始位置
                index += 1
        return 0 if res==float("inf") else res
    三、LeetCode59.螺旋矩阵II
   
    1:题目描述(
    
     59.螺旋矩阵II
    
    )
   
    给你一个正整数
    
     n
    
    ,生成一个包含
    
     1
    
    到
    
     n2
    
    所有元素,且元素按顺时针顺序螺旋排列的
    
     n x n
    
    正方形矩阵
    
     matrix
    
    。
   
     
   
    2:解题思路
   
先偷个懒,明天补上。
    
     今日总结:
    
   
首先来说第一题:977.有序数组的平方,受昨天27.移除元素的影响,一直在考虑要在同一个数组中实现,不增加额外的数组空间,导致想了半天怎么也没想通;
第二题呢:思路一下子就出来了,但是在代码实现上还是有点小问题;
第三题,完全就是没思路了,还是瞄了一眼以前写的代码,才想起来。
整体感觉就是以前写了的,也理解了的,但是自己现在再写,就是一脸懵逼,无从下手的状态,不知道是不是没理解透彻,然后自己认为自己理解透彻了。因为工作的原因,今天暂时先到这儿了,明天把该补的在补上。
 
