基础操作:
访问、查找、插入(append,insert)、删除(pop、remove)
66、加一(使用shi记录进位,如果最后一位有进位则append0)需要注意range的写法
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
n=len(digits)
shi=1
for i in range(n-1,-1,-1):
shi+=digits[i]
digits[i]=shi%10
shi//=10
if shi:
return [shi]+digits
else:
return digits
方法二、使用insert 当最高位为0时,插入1
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
for idx in range(len(digits)-1, -1, -1):
if digits[idx] != 9:
digits[idx] += 1
break
else:
digits[idx] = 0
if digits[0] == 0:
digits.insert(0, 1)
return digits
724、寻找数组的中心下标(使用sum存需要比较的值,而不是每一次都重新相加)
class Solution:
def pivotIndex(self, nums: List[int]) -> int:
n=len(nums)
sumleft=0
sumright=sum(nums)-nums[0]
if sumleft==sumright:
return 0
for i in range(0,n-1):#i=0表示求0-0的和与2-n-1的和,i=n-1时无中心下标
sumleft+=nums[i]
sumright-=nums[i+1]
if sumleft==sumright:
return i+1
return -1
189、轮转数组(一开始想依次移动数组中的数,但是数组大的时候会超时)
一、
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
n=len(nums)
k=k%n
for i in range(k):
left=nums[n-1]
cur=0
for j in range(n):
cur=nums[j]
nums[j]=left
left=cur
return nums
二、出自题解(开一个新的数组、进阶要求空间复杂度O(1),这个不符合)
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
nums1 = nums.copy()
for i in range(len(nums1)):
nums[(i + k) % len(nums1)] = nums1[i]
三、分别翻转数组
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
def reverse(i: int, j: int) -> None:
while i < j:
nums[i], nums[j] = nums[j], nums[i]
i += 1
j -= 1n = len(nums)
k %= n # 轮转 k 次等于轮转 k%n 次
reverse(0, n - 1)
reverse(0, k - 1)
reverse(k, n - 1)作者:灵茶山艾府
链接:https://leetcode.cn/problems/rotate-array/solutions/
834

被折叠的 条评论
为什么被折叠?



