287. Find the Duplicate Number

Difficulty:
Related Topics:
Similar Questions:

Problem

Given an array of integers nums containing n + 1 integers where each integer is in the range [1, n] inclusive.

There is only one repeated number in nums, return this repeated number.

You must solve the problem without modifying the array nums and uses only constant extra space.

  Example 1:

Input: nums = [1,3,4,2,2]
Output: 2

Example 2:

Input: nums = [3,1,3,4,2]
Output: 3

  Constraints:

  Follow up:

Solution 1

/**
 * @param {number[]} nums
 * @return {number}
 */
var findDuplicate = function(nums) {
  var left = 0;
  var right = nums.length - 1;
  while (left < right) {
      var mid = left + Math.floor((right - left) / 2);
      var num = getNum(nums, mid);
      if (num <= mid) {
          left = mid + 1;
      } else {
          right = mid;
      }
  }
  return left;
};

var getNum = function(nums, n) {
    var num = 0;
    for (var i = 0; i < nums.length; i++) {
        if (nums[i] <= n) num++;
    }
    return num;
};

Explain:

nope.

Complexity: