题目

暴力破解

var findDuplicate = function(nums) {
  const map = new Map();
  for(let i=0,len=nums.length;i<len;i++){
    const temp = map.get(nums[i]);
    if(temp)return temp;
    map.set(nums[i],nums[i]);
  }
};

暴力破解

var findDuplicate = function(nums) {
  let result = 0;
  nums.sort((x,y)=>{
    if(x===y)result = x;
    return x-y;
  })
  return result;
};

暴力破解

var findDuplicate = function(nums) {
  const arr = new Array(nums.length).fill(undefined);
  for(let props in nums){
    const temp = arr[nums[props]]
    if(temp)return temp;
    arr[nums[props]] = nums[props];
  }
};

环形链表解法建议去看看关于环形链表的题。环形链表

var hasCycle = function(head) {
    if(!head)return false;
    let slow = fast = head;
    do{
        if(!fast || !fast.next)return false;
        slow = slow.next;
        fast = fast.next.next;
    }while(slow!==fast);
    return true;
};

环形链表2

var detectCycle = function(head) {
    if(!head)return null;
    let slow = fast = head;
    do{
        if(!fast || !fast.next)return null;
        slow = slow.next;
        fast = fast.next.next;
    }while(slow !== fast);
    slow = head;
    while(slow!==fast){
        slow = slow.next;
        fast = fast.next;
    }
    return slow;
};

本题的答案

var findDuplicate = function(nums) {
  let slow = 0;
  let fast = 0;
  do{
    slow = nums[slow];
    fast = nums[nums[fast]];
  }while(slow!==fast);
  slow = 0;
  while (slow != fast) {
    slow = nums[slow];
    fast = nums[fast];
  }
  return slow;
};