审题

  • 数组重复 且 无序
  • 数组范围 0 到 n - 1
  • 寻找数组中任意重复的数字

解题

  • 寻找克隆人?

  • i 看作是房间

  • nums[i] 房间的房主人

  • nums[i] 可疑人员的房间

  • nums[nums[i]] 可疑人员房间的房主人

  • 房间里可能有克隆人

  • for警官遍历查房

  • 如果是房主人,换房间继续遍历查房

  • 如果不是房间主人,检查这个人是不是克隆人

      查看可疑人员的身份证,找到他的房间
      查看他房间里的人是不是房主人
      如果是房主人,则它是克隆人
      如果不是,则他走错屋子,换房间,继续遍历检查
    
	while (nums[i] != i) {
    	if (nums[i] == nums[nums[i]) {
          return nums[i];
        }
    }
  • 如果是克隆人则抓走。
  • 如果不是继续查房。
  • 查到最后如果没找到克隆人则返回-1。