代码拉取完成,页面将自动刷新
package com.fishercoder.solutions;
import java.util.HashSet;
import java.util.Set;
/**
* 287. Find the Duplicate Number
*
* Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive),
* prove that at least one duplicate number must exist. Assume that there is only one duplicate number, find the duplicate one.
*
Note:
You must not modify the array (assume the array is read only).
You must use only constant, O(1) extra space.
Your runtime complexity should be less than O(n2).
There is only one duplicate number in the array, but it could be repeated more than once.
*/
public class _287 {
public static class Solution1 {
/**no-brainer, used O(n) space*/
public int findDuplicate(int[] nums) {
Set<Integer> set = new HashSet<>();
int dup = 0;
for (int i = 0; i < nums.length; i++) {
if (!set.add(nums[i])) {
dup = nums[i];
break;
}
}
return dup;
}
}
public static class Solution2 {
/** O(1) space */
public int findDuplicate(int[] nums) {
int slow = 0;
int fast = 0;
int finder = 0;
while (true) {
slow = nums[slow];
fast = nums[nums[fast]];
if (slow == fast) {
break;
}
}
while (true) {
slow = nums[slow];
finder = nums[finder];
if (slow == finder) {
return slow;
}
}
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。