Dataford
Interview QuestionsInterview GuidesExperiencesMock InterviewsPricing
Get started
Optimizing Large List Rendering
00:00
5 left

Optimizing Large List Rendering

HardPython

Problem

Quinstreet's advertiser listing surfaces may contain thousands of variable-height cards. Implement viewport virtualization: for each scroll query, return only the item index range that can appear in the viewport, plus an overscan buffer for smooth scrolling.

Formal Specification

Implement get_render_windows(heights, queries, overscan). heights is a list of positive integers, where heights[i] is the rendered height of item i in pixels. queries is a list of two-element lists [scroll_top, viewport_height], where both values are integers. overscan is a nonnegative integer number of additional items to include before and after the visible range.

Return a list of dictionaries in query order. Each dictionary must contain start and end, representing the half-open range [start, end) of items to render. An empty result is represented by start == end.

The list is static for all queries. Do not render or scan every item separately for each query.

Constraints

  • 1 <= len(heights) <= 10^6
  • 1 <= heights[i] <= 10^4
  • 1 <= len(queries) <= 10^5
  • 0 <= scroll_top <= 10^12
  • 1 <= viewport_height <= 10^7
  • 0 <= overscan <= len(heights)

Function Signature

def get_render_windows(heights, queries, overscan):
Interviewer

Your question is Optimizing Large List Rendering. Start with the requirements in the Question tab.

Run and submit as often as you like. When you're ready, talk me through your approach or go straight to the code.

You need to log in / sign up to run or submit.
CodePython 3
You need to log in / sign up to run or submit.Ln 2
Run your code to see test output here.