当前位置:网站首页>leetcode:1013. 将数组分成和相等的三个部分

leetcode:1013. 将数组分成和相等的三个部分

2022-08-10 16:33:00 心软且酷丶

难度:简单

        给你一个整数数组 arr,只有可以将其划分为三个和相等的 非空 部分时才返回 true,否则返回 false。

        形式上,如果可以找出索引 i + 1 < j 且满足 (arr[0] + arr[1] + ... + arr[i] == arr[i + 1] + arr[i + 2] + ... + arr[j - 1] == arr[j] + arr[j + 1] + ... + arr[arr.length - 1]) 就可以将数组三等分。

示例 1:

        输入:arr = [0,2,1,-6,6,-7,9,1,2,0,1]
        输出:true
        解释:0 + 2 + 1 = -6 + 6 - 7 + 9 + 1 = 2 + 0 + 1

示例 2:

   输入:arr = [0,2,1,-6,6,7,9,-1,2,0,1]
   输出:false

示例 3:

        输入:arr = [3,3,6,5,-2,2,5,1,-9,4]
        输出:true
        解释:3 + 3 = 6 = 5 - 2 + 2 + 5 + 1 - 9 + 4

提示:

  • 3 <= arr.length <= 5 * 104
  • -104 <= arr[i] <= 104

题解:(分割法)

class Solution:
    def canThreePartsEqualSum(self, arr: List[int]) -> bool:
        a = sum(arr)
        if a % 3 ==1:
            return False
        else:
            pj = a / 3
            list_index1 = []
            list_index2 = []
            s = 0
            s1 = 0
            s2 = 0
            for i in range(len(arr)-1):
                s += arr[i]
                if s == pj:
                    list_index1.append(i)
                    for j in range(list_index1[0]+1,len(arr)-1):
                        s1 += arr[j]
                        if s1 == pj:
                            list_index2.append(j)
                            for m in range(list_index2[0]+1,len(arr)):
                                s2 += arr[m]
                                if s2 == pj:
                                    return True
        return False

 

原网站

版权声明
本文为[心软且酷丶]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_41905051/article/details/126244253