Last updated: Oct 30, 2022
Difficulty : easy
Runtime : 116 ms Faster than 24.24 %
Memory : 43.8 mb Lesser than 44.36 %

1346. Check If N and Its Double Exist

Given an array arr of integers, check if there exist two indices i and j such that :

  • i != j
  • 0 <= i, j < arr.length
  • arr[i] == 2 * arr[j]

Example 1:

Input: arr = [10,2,5,3] Output: true Explanation: For i = 0 and j = 2, arr[i] == 10 == 2 _ 5 == 2 _ arr[j] Example 2:

Input: arr = [3,1,7,11] Output: false Explanation: There is no i and j that satisfy the conditions.

Constraints:

  • 2 <= arr.length <= 500
  • -10^3 <= arr[i] <= 10_3

Solution:

/**
 * @param {number[]} arr
 * @return {boolean}
 */
var checkIfExist = function(arr) {
  arr.sort((a, b) => a - b);

  var res;

  for (var i = 0; i < arr.length; i++) {
    res = search(arr, arr[i] * 2);
    if (res != i && res != -1) {
      return true;
    }
  }
  return false;
};

var search = function (arr, target) {
  var l = 0;
  var r = arr.length - 1;

  while (l <= r) {
    var m = ((r + l) / 2) ^ 0;
    if (arr[m] == target) {
      return m;
    } else if (arr[m] > target) {
      r = m - 1;
    } else {
      l = m + 1;
    }
  }
  return -1;
};