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

  • Post author:
  • Post category:其他


一: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.移除元素的影响,一直在考虑要在同一个数组中实现,不增加额外的数组空间,导致想了半天怎么也没想通;

第二题呢:思路一下子就出来了,但是在代码实现上还是有点小问题;

第三题,完全就是没思路了,还是瞄了一眼以前写的代码,才想起来。

整体感觉就是以前写了的,也理解了的,但是自己现在再写,就是一脸懵逼,无从下手的状态,不知道是不是没理解透彻,然后自己认为自己理解透彻了。因为工作的原因,今天暂时先到这儿了,明天把该补的在补上。



版权声明:本文为weixin_48323589原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。