Skip to content

[BUG] - <缺少特殊测试用例> #31137

@Gauss-p

Description

@Gauss-p

LeetCode 用户名

gauss

问题号码、标题和链接

  1. 三段式数组 II https://leetcode.cn/problems/trionic-array-ii/description/

Bug Category

缺少测试用例 (由于缺少测试用例而接受不正确/低效的代码)

描述

该题目缺少特殊测试用例,导致部分代码尽管没有判断"严格单调递增“和”严格单调递减“也还可以通过
例如,对于测试用例:nums=[1,2,3,3,3,4,5,4,4,3,2,4,2,4],下面代码会解答错误,但是却能通过原所有测试用例:

class Solution:
    def maxSumTrionic(self, nums: List[int]) -> int:
        n = len(nums)
        preSum = [0]*(n+1)
        preSum[1] = nums[0]
        d = [0]*(n-1)
        for i in range(1, n):
            preSum[i+1] = preSum[i]+nums[i]
            d[i-1] = nums[i]-nums[i-1]

        indx = [0]
        for i in range(n-2):
            if d[i] > 0 and d[i+1] < 0:
                indx.append(i+1)
            elif d[i] < 0 and d[i+1] > 0:
                indx.append(i+1)
        indx.append(n-1)
        if d[0] < 0:
            indx.pop(0)

        res = -float("inf")
        for i in range(0, len(indx)-3, 2):
            a, b, c, d = indx[i], indx[i+1], indx[i+2], indx[i+3]
            for j in range(a, b):
                res = max(res, preSum[c+2]-preSum[j])
                res = max(res, preSum[d+1]-preSum[j])
        return res

你使用的语言

Python/Python3

你提交或者运行的代码

class Solution:
    def maxSumTrionic(self, nums: List[int]) -> int:
        n = len(nums)
        preSum = [0]*(n+1)
        preSum[1] = nums[0]
        d = [0]*(n-1)
        for i in range(1, n):
            preSum[i+1] = preSum[i]+nums[i]
            d[i-1] = nums[i]-nums[i-1]

        preZero = [0]*(n)
        for i in range(n-1):
            preZero[i+1] = preZero[i]+(d[i] == 0)
            
        indx = [0]
        for i in range(n-2):
            if d[i] > 0 and d[i+1] < 0:
                indx.append(i+1)
            elif d[i] < 0 and d[i+1] > 0:
                indx.append(i+1)
        indx.append(n-1)
        if d[0] < 0:
            indx.pop(0)


        res = -float("inf")
        for i in range(0, len(indx)-3, 2):
            a, b, c, e = indx[i], indx[i+1], indx[i+2], indx[i+3]
            for j in range(a, b):
                if preZero[e]-preZero[j] == 0:
                    res = max(res, preSum[e+1]-preSum[j])
                if preZero[c+1]-preZero[j] == 0:
                    res = max(res, preSum[c+2]-preSum[j])
        return res

期望行为

对所有选手的通过代码进行重判

屏幕截图

No response

额外的上下文

No response

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions