# 力扣485
class Solution:
def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
#我的代码
T=[]
num=[]
for i in range(len(nums)):
if nums[i]==1:
T.append(nums[i])
else:
num.append(len(T))
T=[]
if i==(len(nums)-1) and nums[len(nums)-1]==1:
num.append(len(T))
max_num=max(num)
return max_num
# 官方代码
# if len(nums)==0:
# return 0
# count=0
# result=0
# for i in range(len(nums)):
# if nums[i]==1:
# count+=1
# else:
# result=max(count,result)
# count=0
# return max(result,count)
本题思路正确,但是本人优先考虑使用列表,这样增加了空间复杂度,同时利用了append函数增加了时间复杂度,相对来说官方代码更可取。
总结:遇到1加1,遇到0清零同时比较大小。
# python一种小聪明解法(哈哈哈)思路就是将整形转换为字符型然后分割最后取最大的列表
return max(len (substr) for substr in ''.join([str(x) for x in nums]).split("0"))
# 力扣283
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
#我的代码 时间复杂度太高
num=0
for i in range(len(nums)):
if nums[i]==0:
num+=1
for n in range(num):
nums.remove(0)
nums.append(0)
# 官方代码
# index=0
# for i in range(len(nums)):
# if(nums[i]!=0):
# nums[index]=nums[i]
# index=index+1
# for i in range(index,len(nums)):
# nums[i]=0
在我的方法中过多利用了列表操作,增加了时间复杂度,官方代码相对更简洁巧妙。
# 力扣27
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
#我的方法 思路:计算数组中与val相同的总数,然后用remove遍历删除。
num=0
for i in range(len(nums)):
if(nums[i]==val):
num+=1
for n in range(num):
nums.remove(val)
return len(nums)
#这是力扣一个大神解法,用双指针的思路,简单易懂 Flying_DU
a = 0
b = 0
while a < len(nums):
if nums[a] != val:
nums[b] = nums[a]
b += 1
a += 1
return b
还是相同的问题,本人还是过多使用数组操作,增加了复杂度,学习大佬的解法,尽量减少时间复杂度。