问题

2653. Sliding Subarray Beauty

给定一个包含n个整数的整数数组nums,就会发现 每个子数组的大小为k.

子数组的优点是子数组中的xth个最小整数 如果为负数,则为0;如果小于x个负整数,则为0.

返回一个包含n - k + 1个整数的整数数组,表示 中第一个索引的顺序排列的子数组的美感 array.

代码

class Solution(object):
    def getSubarrayBeauty(self, nums, k, x):
        """
        :type nums: List[int]
        :type k: int
        :type x: int
        :rtype: List[int]
        """
        eleToFreq = {m: 0 for m in range(-50, 0)}
        i = j = 0
        toReturn = list()
        while j < len(nums):
            if j >= k - 1:
                if nums[j] < 0:
                    eleToFreq[nums[j]] += 1
                a = 0
                for key, value in eleToFreq.items():
                    if value > 0 and a == x - 1:
                        toReturn.append(key)
                        a += 1
                    elif value > 0:
                        a += value
                if a < x :
                    toReturn.append(0)
                if nums[i] < 0:
                    eleToFreq[nums[i]] -= 1
                i += 1
                j += 1
            else:
                if nums[j] < 0:
                    eleToFreq[nums[j]] += 1
                j += 1
        return toReturn


solution = Solution()
v = solution.getSubarrayBeauty([1, -1, -3, -2, 3], 3, 2)  # expected output [-1,-2,-2]
print(v)

v = solution.getSubarrayBeauty([-1, -2, -3, -4, -5], 2, 2)  # expected output [-1,-2,-3,-4]
print(v)

v = solution.getSubarrayBeauty([-3, 1, 2, -3, 0, -3], 2, 1)  # expected output [-3,0,-3,-3,-3]
print(v)

v = solution.getSubarrayBeauty([1,-1,-3,-2,3], 3, 2)  # expected output [-1,-2,-2]
print(v)

v = solution.getSubarrayBeauty([-43], 1, 1)  # expected output [-43]
print(v)

发行

这些情况在IDE中有效,但在Leetcode中无效.我在Intellij中得到了所有预期的答案,但在以下情况下,相同的代码在leetcode中给了我错误的答案

nums=[1,-1,-3,-2,3] k=3 x=2 expected output: [-1,-2,-2] actual output [-3,-3,-2]
nums=[-1,-2,-3,-4,-5] k=2 x=2 expected output: [-1,-2,-3,-4] actual output [-2,-2,-3,-4]

推荐答案

您本地环境上的结果与LeetCode上的结果不同,因为您在LeetCode站点上 Select 了PythonVersion2.您的算法需要按插入顺序迭代DICT eleToFreq.但before Python 3.7不能保证在词典上的迭代将保持插入顺序.

解决方案是 Select "Python3"而不是"Python"(版本2)作为您的LeetCode提交的引擎.

其他问题

不过,您的算法中还有另一个问题:

value大于1,并且a == x - 1不为真时,则不验证a的任何其他副本是否计为第x次出现.该测试仅验证a的第first次出现是否将是第x次出现.

要解决此问题,请替换此代码:

if value > 0 and a == x - 1:
    toReturn.append(key)
    a += 1
elif value > 0:
    a += value

...通过以下方式:

if value > 0 and a <= x - 1 < a + value:
    toReturn.append(key)
a += value

Python相关问答推荐

Python在tuple上操作不会通过整个单词匹配

在Python中管理打开对话框

Julia CSV for Python中的等效性Pandas index_col参数

如何让这个星型模式在Python中只使用一个for循环?

如何设置视频语言时上传到YouTube与Python API客户端

转换为浮点,pandas字符串列,混合千和十进制分隔符

在输入行运行时停止代码

导入错误:无法导入名称';操作';

如何在海上配对图中使某些标记周围的黑色边框

在电影中向西北方向对齐""

将CSS链接到HTML文件的问题

504未连接IB API TWS错误—即使API连接显示已接受''

如何使用加速广播主进程张量?

分解polars DataFrame列而不重复其他列值

对于标准的原始类型注释,从键入`和`从www.example.com `?

大型稀疏CSR二进制矩阵乘法结果中的错误

如果列包含空值,则PANAS查询不起作用

如何在基于时间的数据帧中添加计算值

将索引表转换为Numy数组

如何通过函数的强式路径动态导入函数?