1493 刪掉乙個元素以後全為 1 的最長子陣列

2021-10-23 08:31:02 字數 1597 閱讀 4635

給你乙個二進位制陣列 nums ,你需要從中刪掉乙個元素。

請你在刪掉元素的結果陣列中,返回最長的且只包含 1 的非空子陣列的長度。

如果不存在這樣的子陣列,請返回 0 。

1.滑動視窗

2.轉化成字串,然後以0為分割,還有這招。。沒想到qaq...

3.dp,

dp1[i]表示第i個元素左邊以第i-1個元素結尾的連續1的個數

dp2[i]表示第i個元素右邊以第i+1個元素開頭的連續1的個數

max(dp1[i]+dp2[i])就是答案

class solution:

def longestsubarray(self, nums: list[int]) -> int:

if sum(nums)==len(nums):return len(nums)-1

res=0

left=right=0

count=0

while right=len(nums):break

while count>1:

if nums[left]==0:count-=1

left+=1

res=max(res,right-left+1-count)

right+=1

return res

class solution:

def longestsubarray(self, nums: list[int]) -> int:

left=0

res=0

count=0

for right in range(len(nums)):

if nums[right]==0:count+=1

while left1:

if nums[left]==0:count-=1

left+=1

res=max(res,right-left)

return res

class solution:

def longestsubarray(self, nums: list[int]) -> int:

if 0 not in nums:return len(nums)-1

s=''.join(map(str,nums)).split('0')

res=0

for i in range(len(s)-1):

res=max(res,len(s[i])+len(s[i+1]))

return res

class solution:

def longestsubarray(self, nums: list[int]) -> int:

n=len(nums)

dp1=[0]*n

for i in range(1,n):

if nums[i-1]:dp1[i]=dp1[i-1]+1

dp2=[0]*n

for i in range(n-2,-1,-1):

if nums[i+1]:dp2[i]=dp2[i+1]+1

return max(dp1[i]+dp2[i] for i in range(n))

1493 刪掉乙個元素以後全為 1 的最長子陣列

題目描述 給你乙個二進位制陣列 nums 你需要從中刪掉乙個元素。請你在刪掉元素的結果陣列中,返回最長的且只包含 1 的非空子陣列的長度。如果不存在這樣的子陣列,請返回 0 提示 1 輸入 nums 1,1,0,1 輸出 3 解釋 刪掉位置 2 的數後,1,1,1 包含 3 個 1 示例 2 輸入 ...

刪掉乙個元素以後全為 1 的最長子陣列

刪掉乙個元素以後全為 1 的最長子陣列 給你乙個二進位制陣列 nums 你需要從中刪掉乙個元素。請你在刪掉元素的結果陣列中,返回最長的且只包含 1 的非空子陣列的長度。如果不存在這樣的子陣列,請返回 0 提示 1 輸入 nums 1,1,0,1 輸出 3 解釋 刪掉位置 2 的數後,1,1,1 包含...

1 n個元素中查詢缺失的乙個數

昨天拼多多面試中遇到了這個問題 乙個1 n的自然數的亂序陣列,其中缺失了1到n之間的某個數,如何快速找出這個數?題意 已知乙個有序數列1 n 元素值 中缺少了乙個元素,找出這個元素。1 異或可解 時間複雜度o n 異或有個很巧妙的地方 同一變數和該變數與另一變數的異或值的異或等於這個變數自身。所以我...