Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Hand of Straights

Updated
2 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "846" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

Problem Statement

Alice has some number of cards and she wants to rearrange the cards into groups so that each group is of size groupSize, and consists of groupSize consecutive cards. Given an integer array hand where hand[i] is the value written on the ith card and an integer groupSize, return true if she can rearrange the cards, or false otherwise. Example 1: Input: hand = [1,2,3,6,2,3,4,7,8], groupSize = 3 Output: true Explanation: Alice's hand can be rearranged as [1,2,3],[2,3,4],[6,7,8] Example 2: Input: hand = [1,2,3,4,5], groupSize = 4 Output: false Explanation: Alice's hand can not be rearranged into groups of 4. Constraints: 1 <= hand.length <= 104 0 <= hand[i] <= 109 1 <= groupSize <= hand.length Note: This question is the same as 1296: https://leetcode.com/problems/divide-array-in-sets-of-k-consecutive-numbers/

Explanation

  • Check divisibility: If the number of cards isn't divisible by groupSize, it's impossible to form the groups.
    • Count card occurrences: Use a dictionary (or Counter) to count how many times each card value appears.
    • Iterate and check consecutive sequences: Iterate through the sorted card values. For each card, check if we have enough consecutive cards to form a group of size groupSize. If any card is missing, return False.
  • Runtime Complexity: O(N log N), where N is the number of cards (due to sorting). Storage Complexity: O(N), to store the card counts in the dictionary.

Code

    from collections import Counter

def isNStraightHand(hand, groupSize):
    """
    Determines if Alice can rearrange her cards into groups of groupSize consecutive cards.

    Args:
        hand: A list of integers representing the card values.
        groupSize: The size of each group.

    Returns:
        True if Alice can rearrange the cards, False otherwise.
    """

    n = len(hand)
    if n % groupSize != 0:
        return False

    card_counts = Counter(hand)
    sorted_cards = sorted(card_counts.keys())

    for card in sorted_cards:
        if card_counts[card] > 0:
            count = card_counts[card]
            for i in range(groupSize):
                next_card = card + i
                if card_counts[next_card] < count:
                    return False
                card_counts[next_card] -= count

    return True

More from this blog

C

Chatmagic blog

2894 posts