删除一个元素后,这个最长的 1 秒子数组出了什么问题

问题描述 投票:0回答:1

我正在解决的问题:

给定一个二进制数组 nums,您应该从中删除一个元素。 返回结果数组中仅包含 1 的最长非空子数组的大小。如果不存在这样的子数组,则返回 0。 问题链接:https://leetcode.com/problems/longest-subarray-of-1s-after-deleting-one-element

思考过程:

应用滑动窗口机制,i和j位于数组的开头
如果 array[j] 不为 0,我们会继续递增 j,因为它是安全的
如果 array[j] 为 0 并且第一次为 0,我们会保持递增 j,因为它可以安全地递增 count0
如果 array[j] 为 0 并且第二次为 0 如果 array[i] 为 0 那么我们减少计数并增加 i
如果 array[j] 为 0 并且第二次为 0 如果 array[i] 不为 0 那么我们只需增加 i \

我的代码
https://codeshare.io/w9nxOJ
https://imgur.com/a/kF3pu72

class Solution:
    def longestSubarrayOf1s(self, array):
        i,j = 0,0
        N = len(array)
        toReturn,count0,curr_count=0,0,0
        while j < N:
            if array[j] == 1:
                j+=1
            else:
                if count0 == 0:
                    j+=1
                    count0+=1
                else:
                    if array[i] == 0:
                        i+=1
                        count0-=1
                    else:
                        i+=1
            print('i am updating my max answer to ', j-i, 'in the window of ', i, j)
            toReturn = max(toReturn, j-i)
        return toReturn

测试数组

[1,1,1] #expected 2
[1,1,0,1] #expected 3
[0,1,1,1,0,1,1,0,1] #expected 5
python data-structures logic sliding-window
1个回答
0
投票

你的算法很好,但挑战要求你应该返回结果数组中的大小(仅包含1的最长非空子数组)。您已返回其在 original 数组中的大小。由于需要在找到的子数组中删除一项,因此您应该比当前少返回一项:

toReturn = max(toReturn, j-i - 1)  # One less!
© www.soinside.com 2019 - 2024. All rights reserved.