zoukankan      html  css  js  c++  java
  • leetcode1013

     1 class Solution(object):
     2     def canThreePartsEqualSum(self, A: 'List[int]') -> bool:
     3         n = len(A)
     4         sums = sum(A)
     5         if sums % 3 != 0:
     6             return False
     7         target = sums // 3
     8         
     9         leftpart = 0
    10         leftboundary = n -1
    11         for i in range(n-2):
    12             leftpart += A[i]
    13             if leftpart == target:
    14                 leftboundary = i
    15                 break
    16                 
    17         rightpart = 0
    18         rightboundary = 0
    19         for j in range(n-1,1,-1):
    20             rightpart += A[j]
    21             if rightpart == target:
    22                 rightboundary = j
    23                 break
    24         
    25         if leftboundary < rightboundary:
    26             return True
    27         return False

    先判断数组之和是否是3的倍数,如果不是,那么不能三等分。

    如果可以,先确定1/3的值,保存在变量target中。

    从左向右逐项相加,找到第一组等于target的值的索引,记为i。

    从右向左逐项相加,找到第一组等于target的值的索引,记为j。

    如果i<j,则可以三等分。

    时间复杂度O(n)(三次遍历),64ms,17.4MB。

  • 相关阅读:
    安装jdk
    chrome
    Jenkins启动
    Red Hat Linux分辨率调整
    Jemeter第一个实例
    grep与正则表达式
    使用ngx_lua构建高并发应用
    UML建模之时序图(Sequence Diagram)
    secureCRT mac 下破解
    跨域通信的解决方案JSONP
  • 原文地址:https://www.cnblogs.com/asenyang/p/10587831.html
Copyright © 2011-2022 走看看