分割数组
来源:互联网 发布:每股收益的算法 编辑:程序博客网 时间:2024/06/05 21:11
已知一个全是整数的数组,返回是否能将该数组分成4部分,每一部分累加和相等,分割之不算。
方法一:
设置一个黑盒,存放的是i下标坐标的和加“_”加右边的和
#coding=utf-8def solution(nums): if len(nums)<7: return False allSum=sum(nums) d={} leftSum=nums[0] for i in range(1,len(nums)-1): d[i]=str(leftSum)+"_"+str(allSum-nums[i]-leftSum) leftSum+=nums[i] print d print d.values() l=1 lsum=nums[0] r=len(nums)-2 rsum=nums[-1] while l<r-3: if lsum==rsum: if str(lsum*2+nums[l])+'_'+str(rsum*2+nums[r]) in d.values(): return True elif lsum<rsum: lsum+=nums[l] l+=1 else: rsum+=nums[r] r-=1 return False
方法二:
因为全是正数,可以统计当前下标之前的数字和。然后遍历数组,先找第二个分割点,再找第三个。
def solution2(nums): if len(nums)<7: return False d={} s=nums[0] for i in range(1,len(nums)): d[s]=i s+=nums[i] lsum=nums[0] for i in range(1,len(nums)-5): checkSum=lsum*2+nums[i] if checkSum in d.keys(): j=d[checkSum] checkSum+=lsum+nums[j] if checkSum in d.keys(): k=d[checkSum] if checkSum+nums[k]+lsum==s: return True lsum+=nums[i] return False
阅读全文
0 0
- 数组分割
- 数组分割
- 数组分割
- 数组分割
- 数组分割
- 数组分割
- 数组分割
- 数组分割
- 数组分割
- 数组分割
- 数组分割
- 数组分割
- 数组分割
- 数组分割
- 数组分割
- 数组分割
- 数组分割
- 数组分割
- 斜率优化DP初探 + 例题
- CentOS 安装运行 mongoDB docker镜像
- XListView上拉刷新下拉加载
- Devops学习实践(五)jenkins 与 ant 、findbugs 配合使用
- 八大基本数据类型
- 分割数组
- MySQL、SqlServer、ORACLE三大数据库常用语句之间的区别整理
- LeetCode 530. Minimum Absolute Difference in BST
- GridControl根据条件改变单元格/行颜色(Dev GridControl 单元格着色)
- 频道管理
- Lengthening Sticks 组合数+容斥原理
- ViewPager
- caffe基础-01数据层的配置
- 字典的基础及字典的使用实例