有序数组平方
题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/
文章讲解:https://programmercarl.com/0977.%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E7%9A%84%E5%B9%B3%E6%96%B9.html
视频讲解: https://www.bilibili.com/video/BV1QB4y1D7ep
思路
关键点是要处理有序数组两边的值大于中间的值,然后利用双指针进行操作,建议先看下代码,这个题直接求平方然后排序也更加直观一下;
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
l = 0
r = len(nums) - 1
i = len(nums) - 1
# 先设置一个等长的数组进去
result = [float('inf')] * len(nums)
while l <= r:
if nums[l] **2 > nums[r]** 2:
result[i] =nums[l] **2
l +=1
else:
result[i] =nums[r] **2
r -= 1
i-= 1
return result
以下代码是通过先平方再排序的方式:
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
for i in range(len(nums)):
nums[i]= nums[i] ** 2
nums.sort()
return nums
、
python语法初始化列表 :
、
result = [float(‘inf’)] * len(nums)
、
float(‘inf’): 这是Python中的一种特殊表示,表示正无穷大(infinity)。在数学中,正无穷大表示比任何有限实数都要大的数。我们把res列表中的每个元素都初始化为正无穷大,这是因为在某些算法中,用一个初始值来表示“无穷大”或“无效”等特殊状态。
最小子数组
题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/
文章讲解:https://programmercarl.com/0209.%E9%95%BF%E5%BA%A6%E6%9C%80%E5%B0%8F%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84.html
视频讲解:https://www.bilibili.com/video/BV1tZ4y1q7XE
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
# 即使知道了原理也不知道怎么敲
l = len(nums)
left = 0
right = 0
length = float('inf')
sumNum = 0
while right < l:
sumNum += nums[right]
while sumNum >= target:
length= min(length,right - left+1)
sumNum -= nums[left]
left+=1
right+=1
return length if length != float('inf') else 0