做交换的时候,交换后的是有可能就是重复数字问题 public int duplicate(int[] nums) { if (nums == null || nums.length <= 0) { return -1; } for (int i = 0; i < nums.length; i++) { // nums[i] != i 为了防止 做交换的时候,交换后的是有可能就是重复数字,之后i++,校验就被忽略了 while (nums[i] != i) { int t = nums[i]; if (t == nums[t]) { return t; } //交换 nums[i]和 nums[nums[i]](交换 t 和 nums[t]) int temp = t; t = nums[temp]; nums[temp] = temp; } } return -1; }
点赞

相关推荐

牛客网
牛客企业服务