[220204] Contiguous Array

Given a binary array nums, return the maximum length of a contiguous subarray with an equal number of 0 and 1.

class Solution:
    def findMaxLength(self, nums):

        # 记录目前为止的 pattern
        temp = 0
        res = 0
        mp = {0:-1}

        for i, num in enumerate(nums):
            if num == 0:
                temp -= 1
            else:
                temp += 1

            # 记录新 pattern 和对应的 index 值
            if temp not in mp:
                mp[temp] = i
            # 同 value 表示中间的 0 和 1 个数相等,更新 length
            else:
                res = max(res, i - mp[temp])

        return res

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误通常是由于您使用的 numpy 数组不是连续存储的内存块引起的。要解决这个问题,您可以尝试使用 `numpy.ascontiguousarray()` 函数来创建一个数据是连续存储的副本。 例如: ``` import numpy as np # 创建一个不连续的数组 a = np.empty((3,3)) a[::2,::2] = 1 # 使用 ascontiguousarray() 创建连续存储的数组 b = np.ascontiguousarray(a) print(b) ``` 输出: ``` array([[1., 0., 1.], [0., 0., 0.], [1., 0., 1.]]) ``` 请注意,使用 `ascontiguousarray()` 函数可能会导致内存复制,因此它可能会影响性能。如果您需要处理大型数据集,可能需要考虑使用其他方法来避免内存复制。 ### 回答2: 当使用numpy时,出现“Return a contiguous array (ndim >= 1) in memory (C order)”的错误通常是由于数组的存储顺序不正确所导致的。为了解决这个问题,可以尝试以下几个方法: 1. 使用numpy数组的`array()`函数创建数组时,通过指定`order='C'`参数来确保数组以C顺序存储。例如: ```python import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]], order='C') ``` 2. 当使用numpy中的函数创建数组时,可以使用`np.ascontiguousarray()`函数来强制数组以C顺序存储。例如: ```python import numpy as np arr = np.ascontiguousarray([[1, 2, 3], [4, 5, 6]]) ``` 3. 如果已经有一个数组,并且希望将其转换为C顺序存储,可以使用`np.ndarray`对象的`copy()`方法来创建一个拷贝,并通过设置`order='C'`参数来确保拷贝的数组以C顺序存储。例如: ```python import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) # 假设现有一个数组 new_arr = arr.copy(order='C') # 创建以C顺序存储的拷贝 ``` 通过以上方法,可以确保numpy数组以C顺序存储,从而解决报错问题。 ### 回答3: 当出现“Return a contiguous array (ndim >= 1) in memory (C order)”错误时,意味着你的代码中的某个数组不是“连续数组”。这个错误通常发生在你尝试使用numpy函数时,函数要求输入一个连续数组(即在内存中以C顺序存储的数组),但你提供的数组不符合要求。 为了解决这个问题,你可以尝试以下方法: 1. 将输入数组转换为连续数组:你可以使用numpy的`ascontiguousarray()`函数将输入数组转换为连续数组。这将确保数据在内存中以C顺序进行存储。 2. 检查数组的内存布局:通过使用数组对象的`flags`属性,你可以检查内存布局是F(Fortran)顺序还是C(C)顺序。确保你的数据以C顺序存储,否则使用`np.ascontiguousarray()`进行布局转换。 3. 检查数据类型:确认你的数组的数据类型是否符合要求。有时数据类型不匹配可能会导致此错误。 以下是一个示例代码,演示了如何解决此错误: ```python import numpy as np # 创建一个非连续数组 arr = np.array([[1, 2, 3], [4, 5, 6]], order='F') # 检查数组的内存布局 print(arr.flags) # 尝试使用非连续数组进行操作,将会报错 # np.sum(arr) # 将数组转换为连续数组 arr_contiguous = np.ascontiguousarray(arr) # 确认转换后的数组是连续数组 print(arr_contiguous.flags) # 现在可以使用连续数组进行操作 print(np.sum(arr_contiguous)) ``` 通过将非连续数组使用`np.ascontiguousarray()`转换为连续数组,你可以解决“Return a contiguous array (ndim >= 1) in memory (C order)”错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值