0 0 3 4 4

Input

Output

3

0 불가(중복)
1 가능
2 가능
3 가능 (Output)
4 불가(중복)

__ 보다 크거나 같은 값을 구하라

0 0

Input

Output

-1

0 불가(중복)

Input

Output

2

3 5

0 가능
1 가능
2 가능 (Output)

/**
 * @param {number[]} nums
 * @return {number}
 *
 * time:    O(n log n)
 * space:   O(1)
 */
var specialArray = function (nums) {
  const N = nums.length;
  nums.sort((a, b) => a - b);

  for (let idx = 0; idx <= N; idx++) {    
    if (lowerBound(nums, idx) === (N - idx))
      return idx;
  }
  return -1;
};

var lowerBound = function (nums, key) {
  const N = nums.length;

  let start = 0;
  let end = N;

  while (start < end) {
    const mid = Math.floor((start + end) / 2);
    if (nums[mid] < key)
      start = mid + 1;
    else
      end = mid;
  }

  return start;
}

Input

Output

3

0
0
3
4
4
0
1
2
3
4
/**
 * @param {number[]} nums
 * @return {number}
 *
 * time:    O(n log n)
 * space:   O(1)
 */
var specialArray = function (nums) {
  const N = nums.length;
  nums.sort((a, b) => a - b);

  for (let idx = 0; idx <= N; idx++) {    
    if (lowerBound(nums, idx) === (N - idx))
      return idx;
  }
  return -1;
};

var lowerBound = function (nums, key) {
  const N = nums.length;

  let start = 0;
  let end = N;

  while (start < end) {
    const mid = Math.floor((start + end) / 2);
    if (nums[mid] < key)
      start = mid + 1;
    else
      end = mid;
  }

  return start;
}

Input

Output

3

0
0
3
4
4
0
1
2
3
4
/**
 * @param {number[]} nums
 * @return {number}
 *
 * time:    O(n log n)
 * space:   O(1)
 */
var specialArray = function (nums) {
  const N = nums.length;
  nums.sort((a, b) => a - b);

  for (let idx = 0; idx <= N; idx++) {    
    if (lowerBound(nums, idx) === (N - idx))
      return idx;
  }
  return -1;
};

var lowerBound = function (nums, key) {
  const N = nums.length;

  let start = 0;
  let end = N;

  while (start < end) {
    const mid = Math.floor((start + end) / 2);
    if (nums[mid] < key)
      start = mid + 1;
    else
      end = mid;
  }

  return start;
}

Input

Output

3

0
1
2
3
4
0
0
3
4
4
/**
 * @param {number[]} nums
 * @return {number}
 *
 * time:    O(n log n)
 * space:   O(1)
 */
var specialArray = function (nums) {
  const N = nums.length;
  nums.sort((a, b) => a - b);

  for (let idx = 0; idx <= N; idx++) {    
    if (lowerBound(nums, idx) === (N - idx))
      return idx;
  }
  return -1;
};

var lowerBound = function (nums, key) {
  const N = nums.length;

  let start = 0;
  let end = N;

  while (start < end) {
    const mid = Math.floor((start + end) / 2);
    if (nums[mid] < key)
      start = mid + 1;
    else
      end = mid;
  }

  return start;
}

Input

Output

3

0
1
2
3
4
0
0
3
4
4
/**
 * @param {number[]} nums
 * @return {number}
 *
 * time:    O(n log n)
 * space:   O(1)
 */
var specialArray = function (nums) {
  const N = nums.length;
  nums.sort((a, b) => a - b);

  for (let idx = 0; idx <= N; idx++) {    
    if (lowerBound(nums, idx) === (N - idx))
      return idx;
  }
  return -1;
};

var lowerBound = function (nums, key) {
  const N = nums.length;

  let start = 0;
  let end = N;

  while (start < end) {
    const mid = Math.floor((start + end) / 2);
    if (nums[mid] < key)
      start = mid + 1;
    else
      end = mid;
  }

  return start;
}

Input

Output

3

0
1
2
3
4
0
0
3
4
4
/**
 * @param {number[]} nums
 * @return {number}
 *
 * time:    O(n log n)
 * space:   O(1)
 */
var specialArray = function (nums) {
  const N = nums.length;
  nums.sort((a, b) => a - b);

  for (let idx = 0; idx <= N; idx++) {    
    if (lowerBound(nums, idx) === (N - idx))
      return idx;
  }
  return -1;
};

var lowerBound = function (nums, key) {
  const N = nums.length;

  let start = 0;
  let end = N;

  while (start < end) {
    const mid = Math.floor((start + end) / 2);
    if (nums[mid] < key)
      start = mid + 1;
    else
      end = mid;
  }

  return start;
}

Input

Output

3

0
1
2
3
4
0
0
3
4
4
/**
 * @param {number[]} nums
 * @return {number}
 *
 * time:    O(n log n)
 * space:   O(1)
 */
var specialArray = function (nums) {
  const N = nums.length;
  nums.sort((a, b) => a - b);

  for (let idx = 0; idx <= N; idx++) {    
    if (lowerBound(nums, idx) === (N - idx))
      return idx;
  }
  return -1;
};

var lowerBound = function (nums, key) {
  const N = nums.length;

  let start = 0;
  let end = N;

  while (start < end) {
    const mid = Math.floor((start + end) / 2);
    if (nums[mid] < key)
      start = mid + 1;
    else
      end = mid;
  }

  return start;
}

Input

Output

3

0
1
2
3
4
0
0
3
4
4
/**
 * @param {number[]} nums
 * @return {number}
 *
 * time:    O(n log n)
 * space:   O(1)
 */
var specialArray = function (nums) {
  const N = nums.length;
  nums.sort((a, b) => a - b);

  for (let idx = 0; idx <= N; idx++) {    
    if (lowerBound(nums, idx) === (N - idx))
      return idx;
  }
  return -1;
};

var lowerBound = function (nums, key) {
  const N = nums.length;

  let start = 0;
  let end = N;

  while (start < end) {
    const mid = Math.floor((start + end) / 2);
    if (nums[mid] < key)
      start = mid + 1;
    else
      end = mid;
  }

  return start;
}

Input

Output

3

0
0
3
4
4

Current
Output

0

0
1
2
3
4

Input

Output

3

/**
 * @param {number[]} nums
 * @return {number}
 *
 * time:    O(n log n)
 * space:   O(1)
 */
var specialArray = function (nums) {
  const N = nums.length;
  nums.sort((a, b) => a - b);

  for (let idx = 0; idx <= N; idx++) {    
    if (lowerBound(nums, idx) === (N - idx))
      return idx;
  }
  return -1;
};

var lowerBound = function (nums, key) {
  const N = nums.length;

  let start = 0;
  let end = N;

  while (start < end) {
    const mid = Math.floor((start + end) / 2);
    if (nums[mid] < key)
      start = mid + 1;
    else
      end = mid;
  }

  return start;
}
0
0
3
4
4

Current
Output

0

0
1
2
3
4

Input

Output

3

/**
 * @param {number[]} nums
 * @return {number}
 *
 * time:    O(n log n)
 * space:   O(1)
 */
var specialArray = function (nums) {
  const N = nums.length;
  nums.sort((a, b) => a - b);

  for (let idx = 0; idx <= N; idx++) {    
    if (lowerBound(nums, idx) === (N - idx))
      return idx;
  }
  return -1;
};

var lowerBound = function (nums, key) {
  const N = nums.length;

  let start = 0;
  let end = N;

  while (start < end) {
    const mid = Math.floor((start + end) / 2);
    if (nums[mid] < key)
      start = mid + 1;
    else
      end = mid;
  }

  return start;
}
0
0
3
4
4

Current
Output

0

0
1
2
3
4

Input

Output

3

/**
 * @param {number[]} nums
 * @return {number}
 *
 * time:    O(n log n)
 * space:   O(1)
 */
var specialArray = function (nums) {
  const N = nums.length;
  nums.sort((a, b) => a - b);

  for (let idx = 0; idx <= N; idx++) {    
    if (lowerBound(nums, idx) === (N - idx))
      return idx;
  }
  return -1;
};

var lowerBound = function (nums, key) {
  const N = nums.length;

  let start = 0;
  let end = N;

  while (start < end) {
    const mid = Math.floor((start + end) / 2);
    if (nums[mid] < key)
      start = mid + 1;
    else
      end = mid;
  }

  return start;
}
0
0
3
4
4

Current
Output

0

0
1
2
3
4

Input

Output

3

/**
 * @param {number[]} nums
 * @return {number}
 *
 * time:    O(n log n)
 * space:   O(1)
 */
var specialArray = function (nums) {
  const N = nums.length;
  nums.sort((a, b) => a - b);

  for (let idx = 0; idx <= N; idx++) {    
    if (lowerBound(nums, idx) === (N - idx))
      return idx;
  }
  return -1;
};

var lowerBound = function (nums, key) {
  const N = nums.length;

  let start = 0;
  let end = N;

  while (start < end) {
    const mid = Math.floor((start + end) / 2);
    if (nums[mid] < key)
      start = mid + 1;
    else
      end = mid;
  }

  return start;
}
0
0
3
4
4

Current
Output

0

0
1
2
3
4

Input

Output

3

/**
 * @param {number[]} nums
 * @return {number}
 *
 * time:    O(n log n)
 * space:   O(1)
 */
var specialArray = function (nums) {
  const N = nums.length;
  nums.sort((a, b) => a - b);

  for (let idx = 0; idx <= N; idx++) {    
    if (lowerBound(nums, idx) === (N - idx))
      return idx;
  }
  return -1;
};

var lowerBound = function (nums, key) {
  const N = nums.length;

  let start = 0;
  let end = N;

  while (start < end) {
    const mid = Math.floor((start + end) / 2);
    if (nums[mid] < key)
      start = mid + 1;
    else
      end = mid;
  }

  return start;
}
0
0
3
4
4

Current
Output

2

0
1
2
3
4

deck

By Yongki Kim

deck

  • 65