Array - Searching for items in an array (작성중)

참고


https://leetcode.com/explore/learn/card/fun-with-arrays/511/in-place-operations/3257/

In-Place Array


코드 구현


def evenSquared(arr: List[int]) -> List[int]:
    for i in range(len(arr)):
        if i % 2 == 0:
            arr[i] = arr[i] ** 2

    return arr

문제풀기


1. Check If N and Its Double Exist (특정 값의 곱하기 2한 값이 배열안에 있는지 확인)

Check If N and Its Double Exist)


def checkIfExist(arr: List[int]) -> bool:
    """
    반복문 돌면서 전체 비교 (1차 작업)
    Runtime: 68 ms
    Memory Usage: 14.4 MB
    """
    if not arr:
        return False

    for i in range(0, len(arr)):
        item_divided_half = arr[i] / 2

        for j in range(0, len(arr)):
            if j == i:
                continue

            if item_divided_half == arr[j]:
                return True

    return False


def checkIfExist(arr: List[int]) -> bool:
    """
    반복문 돌면서 값을 set에 저장해두고, set을 기준으로 비교. (2차 작업)
    Runtime: 48 ms
    Memory Usage: 14.4 MB
    """
    if not arr:
        return False

    doubles = set()

    for i in range(0, len(arr)):
        if arr[i] * 2 in doubles or arr[i] / 2 in doubles:
            return True

        doubles.add(arr[i])

    return False

2. Valid Mountain Array (각 아이템의 흐름이 산 모양인지 확인)

Valid Mountain Array)


def validMountainArray(arr: List[int]) -> bool:
    """
    1차 작업물
    Runtime: 204 ms
    Memory Usage: 15.6 MB
    """
    if not arr or len(arr) < 3:
        return False

    # 올라간 적이 있다.
    is_up = False

    # 내려간 적이 있다.
    is_down = False

    for i in range(1, len(arr)):
        if arr[i - 1] == arr[i]:
            return False

        elif arr[i - 1] < arr[i]:
            if is_down:
                # 내려갔었다가 다시 올라가는 경우
                return False
            is_up = True

        elif arr[i - 1] > arr[i]:
            is_down = True

    if is_up and is_down:
        return True

    return False


def validMountainArray(arr: List[int]) -> bool:
    """
    2차 작업물(개선)
    Runtime: 204 ms
    Memory Usage: 15.4 MB
    """
    if not arr or len(arr) < 3 or (arr[0] >= arr[1]):
        return False

    # 올라간 적이 있다.
    is_up = True

    for i in range(1, len(arr)):
        if arr[i - 1] == arr[i]:
            return False

        if is_up:
            # 올라가는 상황에서 내려가야하는 경우
            if arr[i - 1] > arr[i]:
                is_up = False

        if not is_up:
            # 올라가는 상황이 끝났는데, 올라간다.
            if arr[i - 1] < arr[i]:
                return False

    return not is_up # 결국 내려가야 하기 때문에.

관련 포스트