数组总结
数组要降时间复杂度就要把双重循环改为双指针,至于双指针的起始位置就看题目的特性,可以两边都试试
思考:同时处理两件事,并且某一件事为从头到尾,另一件为执行一部分数据时,用双下标法 (通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。)
易错点:result[::-1]代表倒序;空数组添加新元素是用result.append(nums[i]*nums[i])
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
i,j=0,0
while i<len(nums):
j=0
nums[i]=nums[i]*nums[i]
while j<i:
if nums[i]<nums[j]:
a= nums[i]
nums[i]=nums[j]
nums[j]=a
j+=1
i+=1
return nums
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
i,j=0,len(nums)-1
result=[]
r=len(nums)-1
while i<j:
if(nums[i]*nums[i]<nums[j]*nums[j]):
result.append(nums[j]*nums[j])
j-=1
else:
result.append(nums[i]*nums[i])
i+=1
result.append(nums[i]*nums[i])
return result[::-1]
python3中数组切片为:
双重循环会超时
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
i,j=0,0
result=[]
while(i<len(nums)):
j=i
while(sum(nums[i:j])<7 and j<i<len(nums)):
j+=1
if(len(result)>len(nums[i:j])):
result=nums[i:j]
if(len(result==0)):
return 0
else:
return len(result)
思考:通过双下标构成滑动窗口 ,时间复杂度为o(n),因为j遍历一遍n,i遍历的总次数是n,所以是2n,复杂度则为o(n)
易错点:j要在最后加,仍未思考很明白
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
i,j=0,0
result=0
sumup=0
while j<len(nums):
sumup+=nums[j]
while sumup>=target and i<len(nums):
if result>0:
if j-i<result:
result=j-i+1
else:
result=j-i+1
sumup-=nums[i]
i+=1
print("i",nums[i:j+1])
j+=1
if result==0 :
return 0
else:
return result
题目描述:给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
题目思考: result=[[0 for i in range(n)] for j in range(n) ]//二维数组生成器 固定写法要记住
四个循环写完四种情况
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
startx=0
starty=0
result=[[0 for i in range(n)] for j in range(n) ]//二维数组生成器 固定写法要记住
a=1
side=n
for i in range(n//2)://四个循环写完四种情况
while starty<(side-1-i):
result[startx][starty]=a
a+=1
starty+=1
while startx<(side-1-i):
result[startx][starty]=a
a+=1
startx+=1
while starty>i:
result[startx][starty]=a
a+=1
starty-=1
while startx>i:
result[startx][starty]=a
a+=1
startx-=1
# side-=1
startx+=1
starty+=1
if n%2==1:
result[startx][starty]=a
return result