You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python循环代码顺序疑问:LeetCode 219存在重复元素II解法

为什么visited[nums[i]] = i必须放在判断条件之后?

颠倒顺序的问题出在哪?

你写的颠倒顺序的代码,会直接把逻辑搞崩:
每次循环先把当前元素的索引i塞进visited字典,紧接着判断nums[i] in visited——这肯定是真的,刚存进去的嘛。然后算abs(i - visited[nums[i]]),结果是0,必然满足<=k的条件。不管数组里有没有符合要求的重复元素,代码第一次循环就会返回True,完全不符合题目要找两个不同位置重复元素的要求。

正确顺序的逻辑意义

先判断、再更新字典的顺序,是为了:

  • 先检查当前元素之前有没有出现过(也就是在visited里存在不)
  • 如果之前出现过,就验证两次的索引差是否符合<=k的要求,符合就直接返回True
  • 如果不符合要求,或者元素是第一次出现,就把当前索引存进(或更新)visited——这一步是为后续遍历保留最近的旧索引,毕竟越近的索引,和后续元素的索引差越容易满足<=k的条件

学习资源推荐

  • 看Python官方文档里的流程控制章节,重点理解代码逐行从上到下执行的规则
  • 找基础Python教程里关于循环、条件判断执行顺序的内容,搞清楚变量/字典的实时修改会怎么影响后续代码的执行

内容的提问来源于stack exchange,提问作者Ashley Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 04:50:24