LeetCode可被3整除的最大和题解中遍历vector<int>(t1)的作用是什么?
问题核心原因解析
vector<int>(t1)的作用是创建当前t1数组的临时只读副本,避免遍历过程中修改原数组导致的状态污染,具体逻辑如下:
- 该解法为动态规划思路:
t1[r]代表当前可获得的、除以3余数为r的最大和。每遍历到新元素a时,需要基于上一轮遍历完全结束后的三个旧状态值,来推导本轮加入a后的新状态。 - 若直接写
for(int j : t1),遍历的是原t1数组:遍历过程中你会不断修改t1的元素值,后续迭代拿到的j可能是本轮刚更新的新值,会导致同一个元素a被重复累加多次,违背了每个元素最多选一次的规则,最终得到错误结果。 - 改为
for(int j: vector<int>(t1))后,会先复制一份进入当前外层循环时的t1快照,整个内层循环遍历的都是这份固定不变的旧状态副本,所有更新都作用在原t1上,不会影响本轮遍历的取值,保证每个a只会基于上一轮状态计算一次,逻辑完全正确。
内容的提问来源于stack exchange,提问作者Dinesh
相关产品推荐
相关产品推荐

