977.有序数组的平方
Python
#最后反转列表
class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:left,right=0,len(nums)-1new_nums=[]while left<=right:num1=nums[left]**2num2=nums[right]**2if num1<num2:new_nums.append(num2)right-=1else:new_nums.append(num1)left+=1new_nums.reverse()return new_nums#用deque
from collections import deque
class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:left,right=0,len(nums)-1new_nums=deque()while left<=right:num1=nums[left]**2num2=nums[right]**2if num1<num2:new_nums.appendleft(num2)right-=1else:new_nums.appendleft(num1)left+=1return list(new_nums)
C++
#用reverse
class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {vector<int>new_nums;int left=0,right=nums.size()-1;while (left<=right){int num1=nums[left]*nums[left];int num2=nums[right]*nums[right];if (num1<num2){new_nums.push_back(num2);right--;}else{new_nums.push_back(num1);left++;}}reverse(new_nums.begin(), new_nums.end());return new_nums;}
};
#用deque
class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {deque<int>new_nums;int left=0,right=nums.size()-1;while (left<=right){int num1=nums[left]*nums[left];int num2=nums[right]*nums[right];if (num1<num2){new_nums.push_front(num2);right--;}else{new_nums.push_front(num1);left++;}}vector<int>myVector(new_nums.begin(),new_nums.end());return myVector;}
};
209.长度最小的子数组
Python
class Solution:def minSubArrayLen(self, target: int, nums: List[int]) -> int:slow=0total=0result=float("inf")for fast in range(len(nums)):total+=nums[fast]while total>=target:result=min(result,fast+1-slow)total-=nums[slow]slow+=1return result if result!=float("inf") else 0
C++
class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int slow=0,total=0;long long result=1e18;for (int fast=0;fast<nums.size();fast++){total+=nums[fast];while (total>=target){result=result<fast-slow+1?result:fast-slow+1;total-=nums[slow];slow++;}}return result==1e18?0:result;}
};
59.螺旋矩阵II
Python
class Solution:def generateMatrix(self, n: int) -> List[List[int]]:nums = [[0] * n for _ in range(n)]startx, starty = 0, 0 # 起始点loop, mid = n // 2, n // 2 # 迭代次数、n为奇数时,矩阵的中心点count = 1 # 计数for offset in range(1, loop + 1) : # 每循环一层偏移量加1,偏移量从1开始for i in range(starty, n - offset) : # 从左至右,左闭右开nums[startx][i] = countcount += 1for i in range(startx, n - offset) : # 从上至下nums[i][n - offset] = countcount += 1for i in range(n - offset, starty, -1) : # 从右至左nums[n - offset][i] = countcount += 1for i in range(n - offset, startx, -1) : # 从下至上nums[i][starty] = countcount += 1 startx += 1 # 更新起始点starty += 1if n % 2 != 0 : # n为奇数时,填充中心点nums[mid][mid] = count return nums
总结
二刷了,这道题还是没有写出来,之前记的方法都忘记了,不过也是有了新的感悟。