Most Beautiful Item for Each Query

MediumArrayBinary SearchSorting

Solution

export function maximumBeauty(items: number[][], queries: number[]): number[] {
  const [n, m] = [items.length, queries.length];
  const answer = new Array<number>(m).fill(0);
  const sortedItems = items.sort((a, b) => a[0] - b[0]);
  const sortedQueries = queries.map((query, i) => [i, query]).sort((a, b) => a[1] - b[1]);
 
  let itemIndex = 0;
  let maxBeauty = 0;
  for (const [queryIndex, query] of sortedQueries) {
    while (itemIndex < n && sortedItems[itemIndex][0] <= query) {
      maxBeauty = Math.max(maxBeauty, sortedItems[itemIndex][1]);
      itemIndex += 1;
    }
    answer[queryIndex] = maxBeauty;
  }
  return answer;
}

Complexity

  • Time: O(nlogn+mlogm)O(n \cdot logn + m \cdot logm)
  • Space: O(n+m)O(n + m)
    • sort 알고리즘에 대한 공간복잡도는 고려하지 않음