977. 有序數(shù)組的平方 - 力扣(LeetCode)
一開始沒想出來(lái)怎么用雙指針场靴,直接爆破
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
nums_2 = [x**2 for x in nums]
nums_2 = sorted(nums_2)
return nums_2
方法二 雙指針(左右指針)
因?yàn)轭}目給的數(shù)組是非遞減順序,所以兩邊的平方一般比中間大(存在負(fù)數(shù))
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
result = nums.copy()
k = -1
left = 0
right = len(nums)-1
while left <= right:
if nums[left]**2 > nums[right]**2:
result[k] = nums[left]**2
left = left+1
else:
result[k] = nums[right]**2
right = right-1
k = k-1
return result
- 第一種速度比第二種快港准,為什么旨剥?
209. 長(zhǎng)度最小的子數(shù)組 - 力扣(LeetCode)
一開始想寫從起始點(diǎn)開始的雙指針,邊界太難找浅缸,沒成功
滑動(dòng)窗口
class Solution(object):
def minSubArrayLen(self, target, nums):
i = 0
sum = 0
result = len(nums) + 1
for j in range(len(nums)):
sum = sum + nums[j]
while sum >= target:
sub_l = j-i+1
result = min(result, sub_l)
sum = sum - nums[i]
i = i+1
if result == len(nums) + 1:
result = 0
return result
*和原本爆破方法不同轨帜,滑動(dòng)窗口區(qū)間由少到多判斷,爆破區(qū)間由多到少判斷衩椒,所以一個(gè)for就可以解決蚌父。
59. 螺旋矩陣 II
看到題目完全沒思路,直接看題解
解題思路
一圈一圈從里到外循環(huán)毛萌,注意邊界處理方法統(tǒng)一
方法一
class Solution(object):
def generateMatrix(self, n):
"""
:type n: int
:rtype: List[List[int]]
"""
star_x, star_y = 0, 0
offset = 1
count = 1
matrix = [[0] * n for _ in range(n)]
for quan in range(n//2):
i = star_x
j = star_y
while j < n-offset:
matrix[i][j] = count
count = count+1
j = j+1
while i < n-offset:
matrix[i][j] = count
count = count+1
i = i+1
while j > offset-1:
matrix[i][j] = count
count = count + 1
j = j-1
while i > offset-1:
matrix[i][j] = count
count = count+1
i = i-1
star_x = star_x + 1
star_y = star_y + 1
offset = offset + 1
if n % 2 == 1:
matrix[n//2][n//2] = count
return matrix
- python 刷題的時(shí)候不要用numpy庫(kù)
:type n: int :rtype: List[List[int]] #題目中參數(shù)類型明確給了苟弛,不要自己重新定義