Identifying the quickselect pattern
There are many problems where we need to find the top or bottom k elements in a dataset based on some complex scoring criteria. These are generally medium or hard problems where we need to define a scoring function to rank elements in a dataset. The scoring function may be stateless (the score of an element depends only on the element itself, like abs(x - target)) or stateful (the score depends on auxiliary data computed from the whole dataset, like a character's frequency in the input string), depending on the complexity of the problem, and the goal is to find the elements with the top k or the bottom k scores.
If the problem statement or its solution follows the generic template below, it can be solved using the generic quickselect algorithm.
Given an array of data elements, find the elements with the top
k or bottom k scores, where a function f computes the score of every element.Example
Let's consider the following problem as an example to better understand how to identify and solve a problem using the generic quickselect algorithm.
Problem statement: Given an integer array `arr`, an integer `k` and a `target`, find the `k` closest elements to the `target`.
An integer `x` is closer to `target` than `y` if:
- `|x - target| < |y - target|`, OR
- `|x - target| == |y - target|` AND `x < y`
Liking the course? Check our discounted plans to continue learning.