Bird
Raised Fist0
Interview Prephash-maps-setseasyAmazonAppleGoogle

Contains Duplicate

Choose your preparation mode4 modes available
</>
IDE
def containsDuplicate(nums: list[int]) -> bool:public boolean containsDuplicate(int[] nums)bool containsDuplicate(vector<int> &nums)function containsDuplicate(nums)
def containsDuplicate(nums):
    # Write your solution here
    pass
class Solution {
    public boolean containsDuplicate(int[] nums) {
        // Write your solution here
        return false;
    }
}
#include <vector>
using namespace std;

bool containsDuplicate(vector<int> &nums) {
    // Write your solution here
    return false;
}
function containsDuplicate(nums) {
    // Write your solution here
}
Coming soon
0/10
Common Bugs to Avoid
Wrong: falseFailing to detect duplicates due to missing or incorrect set membership checks.✅ Add elements to a hash set and return true immediately if an element is already present.
Wrong: trueReturning true without verifying duplicates exist, possibly returning true by default.✅ Only return true when a duplicate is found; otherwise return false after full check.
Wrong: falseOff-by-one error skipping last element in duplicate check loop.✅ Ensure loop iterates over all elements from 0 to n-1 inclusive.
Wrong: TLEUsing nested loops causing O(n^2) time complexity on large inputs.✅ Use a hash set to achieve O(n) time complexity for membership checking.
✓
Test Cases
t1_01basic
Input{"nums":[1,2,3,1]}
Expectedtrue

The number 1 appears twice.

t1_02basic
Input{"nums":[1,2,3,4]}
Expectedfalse

All elements are distinct; no duplicates.

t2_01edge
Input{"nums":[42]}
Expectedfalse

Single element array cannot have duplicates.

t2_02edge
Input{"nums":[7,7,7,7,7]}
Expectedtrue

All elements are the same, so duplicates exist.

t2_03edge
Input{"nums":[]}
Expectedfalse

Empty array has no duplicates.

t2_04edge
Input{"nums":[1,2,3,4,5,6,7,8,9,10]}
Expectedfalse

Array with exactly 10 distinct elements, testing boundary size.

t3_01corner
Input{"nums":[1,2,3,4,5,1]}
Expectedtrue

Duplicate at the end of the array.

t3_02corner
Input{"nums":[1,2,3,4,5,5,5]}
Expectedtrue

Multiple duplicates of the same number.

t3_03corner
Input{"nums":[1,2,3,4,5,6,7,8,9,10]}
Expectedfalse

No duplicates, tests off-by-one errors in loops.

t4_01performance
Input{"nums":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,100000]}
⏱ Performance - must finish in 2000ms

Large input n=100000 with all unique elements; O(n) expected to complete within 2s.

Practice

(1/5)
1. You are given a binary array and need to find the length of the longest contiguous subarray with an equal number of 0s and 1s. Which algorithmic approach guarantees an optimal O(n) time solution?
easy
A. Brute force nested loops checking all subarrays for equal 0s and 1s
B. Prefix sum combined with a hash map to track first occurrences of prefix sums
C. Dynamic programming storing counts of 0s and 1s separately for all subarrays
D. Greedy approach expanding subarrays while counts of 0s and 1s remain equal

Solution

  1. Step 1: Understand problem constraints

    The problem requires finding the longest contiguous subarray with equal 0s and 1s efficiently.
  2. Step 2: Identify algorithmic pattern

    Using prefix sums transformed by treating 0 as -1, and a hash map to store earliest prefix sum indices, allows O(n) time detection of subarrays with zero sum difference.
  3. Final Answer:

    Option B -> Option B
  4. Quick Check:

    Prefix sum + hash map is classic for equal 0/1 subarray [OK]
Hint: Prefix sums + hash map track equal 0s and 1s efficiently [OK]
Common Mistakes:
  • Thinking greedy can find longest equal 0/1 subarray
  • Using DP that tracks counts separately is inefficient
  • Brute force is correct but not optimal
2. Consider the following code snippet implementing the optimal approach for longest consecutive sequence. What is the value of max_len returned when the input is [1, 9, 3, 10, 2]?
easy
A. 4
B. 2
C. 3
D. 5

Solution

  1. Step 1: Identify sequence starts

    Numbers are {1,2,3,9,10}. Sequence starts are numbers where num-1 not in set: 1 and 9.
  2. Step 2: Count consecutive lengths

    From 1: sequence is 1,2,3 -> length 3. From 9: sequence is 9,10 -> length 2. Max length is 3.
  3. Final Answer:

    Option C -> Option C
  4. Quick Check:

    Longest consecutive sequence is [1,2,3] length 3 [OK]
Hint: Only count sequences starting at numbers without predecessor [OK]
Common Mistakes:
  • Counting sequences from every number causing duplicates
  • Off-by-one errors in length counting
  • Confusing max length with total unique numbers
3. You are given an integer array and a number k. You need to find the length of the longest contiguous subarray whose sum is divisible by k. Which of the following approaches guarantees an optimal solution in O(n) time?
easy
A. Use a nested loop to check all subarrays and verify divisibility by k.
B. Use dynamic programming to store the maximum length subarray ending at each index with sum divisible by k.
C. Use a sliding window that expands and contracts based on the current sum modulo k.
D. Use prefix sums and a hash map to store the earliest index of each remainder modulo k.

Solution

  1. Step 1: Understand the problem constraints

    We want the longest subarray with sum divisible by k. Checking all subarrays with nested loops is O(n^2) and inefficient.
  2. Step 2: Recognize prefix sum + remainder pattern

    Using prefix sums modulo k, if two prefix sums have the same remainder, the subarray between them is divisible by k. Storing earliest indices of remainders in a hash map allows O(n) solution.
  3. Final Answer:

    Option D -> Option D
  4. Quick Check:

    Prefix sums + hash map is classic for subarray sum modulo problems [OK]
Hint: Prefix sums + remainder hash map -> O(n) solution [OK]
Common Mistakes:
  • Thinking sliding window works for modulo sums
  • Assuming DP is needed for this problem
  • Believing brute force is acceptable for large inputs
4. The following code attempts to find the intersection of two arrays using the two-pointer approach. Which line contains a subtle bug that can cause incorrect results when duplicates exist?
def intersect(nums1, nums2):
    nums1.sort()
    nums2.sort()
    i, j = 0, 0
    intersection = []
    while i < len(nums1) and j < len(nums2):
        if nums1[i] == nums2[j]:
            intersection.append(nums1[i])
            i += 1
        elif nums1[i] < nums2[j]:
            i += 1
        else:
            j += 1
    return intersection
medium
A. Line that sorts nums1
B. Line that sorts nums2
C. Line that increments j in the else clause
D. Line that increments i after appending intersection

Solution

  1. Step 1: Identify the bug

    When nums1[i] == nums2[j], only i is incremented but j is not, causing infinite loop or missing duplicates.
  2. Step 2: Correct fix

    Both i and j must be incremented to move past matched elements and handle duplicates correctly.
  3. Final Answer:

    Option D -> Option D
  4. Quick Check:

    Incrementing only one pointer on match breaks correctness [OK]
Hint: Both pointers must advance on match [OK]
Common Mistakes:
  • Incrementing only one pointer on match
  • Modifying input arrays directly
  • Forgetting to sort arrays
5. Suppose the problem changes: now elements can be reused multiple times, and you want the top k elements by total frequency including duplicates. Which modification to the optimal bucket sort approach correctly handles this?
hard
A. Use the same bucket sort approach since frequencies already count duplicates.
B. Modify frequency counting to count unique elements only, then apply bucket sort.
C. Use a min-heap to track top k elements dynamically as frequencies update with reuse.
D. Sort the entire nums array and pick the top k elements by frequency.

Solution

  1. Step 1: Understand reuse changes frequency dynamics

    Elements can appear multiple times dynamically, so frequencies update continuously.
  2. Step 2: Bucket sort is static and cannot handle dynamic frequency updates

    Min-heap allows maintaining top k elements efficiently as frequencies change.
  3. Step 3: Choose min-heap approach for dynamic top k tracking

    Min-heap keeps size k and updates with new frequencies, suitable for reuse scenario.
  4. Final Answer:

    Option C -> Option C
  5. Quick Check:

    Bucket sort is static; min-heap adapts to frequency changes [OK]
Hint: Dynamic frequency updates require min-heap, not bucket sort [OK]
Common Mistakes:
  • Assuming bucket sort works with dynamic reuse
  • Counting unique elements only loses frequency info
  • Sorting entire array is inefficient
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard