关注
第二道很明显用双指针更简单一点吧,i指向第一个数,j指向最后一个数,两边往中间移就好了,写了一下,这么写的好处是不用讨论你博客中写的那些特殊情况,都包含在这段代码里了,按我的逻辑是没有问题的,有问题的话请指教! def equal_3(arr):
# 判断特殊输入
if not arr or len(arr) < 3:
return False
left = 0 # 表示分成三组之后,第一组的最后元素的下标
right = len(arr) - 1 # 表示分成三组之后,第三组的第一个元素下标
sum_l = arr[0] # 第一组的和
sum_r = arr[len(arr) - 1] #第三组的和
# 当最后left=right时,必然不存在满足的分法
while left < right:
# 如果第一组的和小于第三组,left右移,sum_l增加;如果第一组的和大于第三组,right左移,sum_r增加
# 相等的情况时就判断中间的那组和是否和这两组和相同,相同则返回True,不同的话因为可能会存在[1,2,3,6,3,1,2]
# 这种情况,所有左右指针同时移
if sum_l < sum_r:
left += 1
sum_l += arr[left]
elif sum_l > sum_r:
right -= 1
sum_r += arr[right]
else:
if sum(arr[left+1:right]) == sum_l:
return True
else:
left += 1
sum_l += arr[left]
right -= 1
sum_r += arr[right]
return False
查看原帖
点赞 6
相关推荐
02-17 23:16
南京理工大学 C++ 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 牛客新年AI问运 #
10766次浏览 148人参与
# 第一次面试 #
1072648次浏览 13736人参与
# 牛客AI体验站 #
17201次浏览 297人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
329168次浏览 2127人参与
# 你喜欢工作还是上学 #
89920次浏览 888人参与
# 被AI治愈的瞬间 #
91132次浏览 690人参与
# 有必要和同事成为好朋友吗? #
1820次浏览 34人参与
# 虾皮求职进展汇总 #
378354次浏览 2795人参与
# 百度求职进展汇总 #
667703次浏览 6293人参与
# 招聘要求与实际实习内容不符怎么办 #
169540次浏览 926人参与
# 如果不上班,你会去做什么 #
29455次浏览 466人参与
# 非技术岗薪资爆料 #
491411次浏览 3047人参与
# 你找工作的时候用AI吗? #
173823次浏览 893人参与
# 产品薪资爆料 #
158989次浏览 855人参与
# 你觉得什么岗位会被AI替代 #
41721次浏览 283人参与
# 考研失败就一定是坏事吗? #
222582次浏览 1543人参与
# 国企vs私企,你更想去? #
320152次浏览 2530人参与
# 我的求职精神状态 #
431917次浏览 3082人参与
# 秋招想进国企该如何准备 #
127595次浏览 620人参与
# 卷__卷不过你们,只能卷__了 #
42343次浏览 669人参与
查看11道真题和解析