题目:

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/partition-array-into-three-parts-with-equal-sum

题解:先遍历一边数组,得到总和,然后求除3的值(avg),如果除不尽,当然直接返回false;然后定义左右两个用来做双指针的整数变量和存左右两部分和值的变量,同时往中间搜索,如果中间没有空间了(没有第三部分)也是false;两边都分出等于avg的值了,中间如果等于avg就是true,不等于就是false;

代码:

class Solution {
public boolean canThreePartsEqualSum(int[] A) {
int avg = 0;
for (int t:A)
avg+=t;
if (avg%3 != 0)
return false;
avg /=3; int l_sum = 0;
int r_sum = 0;
int lp = 0;
int rp = A.length-1; while (lp<=rp){
if (l_sum!=avg || lp == 0){
l_sum+=A[lp];
lp++;
}
if (r_sum!=avg || rp == A.length-1){
r_sum+=A[rp];
rp--;
} if (l_sum == avg && r_sum == avg && lp<=rp)
{
int m_sum = 0;
for (int i = lp; i <= rp; i++)
m_sum+=A[i];
if (m_sum == avg)
return true;
else
return false;
}
}
return false; }
}

最新文章

  1. Atitit 动态按钮图片背景颜色与文字组合解决方案
  2. Xcode 快速开发 代码块
  3. 大家一起Aop
  4. 使用dwr时动态生成table的一个小技巧
  5. [转]向facebook学习,通过协程实现mysql查询的异步化
  6. puppet学习笔记(一)
  7. Solr字段配置错误
  8. Bulb Switcher
  9. leetcode:ZigZag Conversion 曲线转换
  10. Gartner:Hype Cycle for Emerging Technologies-2013
  11. NEUOJ711 异星工厂 字典树+贪心
  12. Neo4查询语言Cypher3.0.7在antlr4下的文法(原创分享)
  13. 洛谷 P1890 gcd区间
  14. maven打war包注意之xml、properties文件没打进去解决方法
  15. linux下ip命令用法
  16. 用C#绘图实现动画出现卡屏(运行慢)问题的解决办法
  17. C语言中的atan和atan2
  18. 多表insert操作详解
  19. python爬虫学习之日志记录模块
  20. linux远程目录共享

热门文章

  1. [LC] 125. Valid Palindrome
  2. [LC] 15. 3Sum
  3. JS代码,从一个数组中得到连号的数并显示
  4. 1043 输出PATest (20 分)
  5. Ajax如何提交数据到springMVC后台
  6. MAYA卸载/完美解决安装失败/如何彻底卸载清除干净MAYA各种残留注册表和文件的方法
  7. mysql表关联问题(第三卷:外键多对多)
  8. Java日期时间API系列12-----Jdk8中java.time包中的...
  9. MicrosoftOfficeProfessionalPlus2013傻瓜式激活工具
  10. idea maven 项目可以运行但依赖包一直是红色