알고리즘, 자료구조

[알고리즘] Leetcode. Replace Elements with Greatest Element on Right Side

Alexim 2022. 5. 27. 16:56

Given an array arr, replace every element in that array with the greatest element among the elements to its right, and replace the last element with -1.

After doing so, return the array.

 

배열 arr가 주어지고 모든 엘리먼트를 오른쪽에 있는 엘리먼트 중 제일 큰 엘리먼트로 바꾸세요. 그리고 마지막 엘리먼트는 -1로 바꾸세요.

마지막으로 배열을 리턴하세요.

 

- 처음 푼 코드

var replaceElements = function(arr) {
    let greatestNumber; 
    
    for (let i = 0; i < arr.length; i++) {
        greatestNumber = arr[i + 1];
        
        for (let j = i + 2; j < arr.length; j++) {
            if (greatestNumber < arr[j]) {
                greatestNumber = arr[j];
            }
        }
        arr[i] = greatestNumber;
    }
    
    arr[arr.length - 1] = -1;
    
    return arr;
};

시간복잡도가 O(n^2) 으로 좋은 코드는 아닌 것 같다.

공간복잡도는 O(1)

 

- 다시 풀기

var replaceElements = function(arr) {
    let greatestNumber = arr[arr.length - 1]; 
    let temp;
    
    for (let i = arr.length - 2; i >= 0; i--) {
        temp = arr[i];
        arr[i] = greatestNumber;

        if (temp > greatestNumber) {
            greatestNumber = temp;
        }
    }

    arr[arr.length - 1] = -1;
    
    return arr;
};

얼핏 보면 두 개의 루프를 이용해야 할 것 같지만 엘리먼트 값의 오른쪽 값을 비교하는 것이기 때문에 for문을 끝에서부터 시작하면 된다. 

 

 

 

 

참고할 사이트

https://www.geeksforgeeks.org/replace-every-element-with-the-greatest-on-right-side/

 

Replace every element with the greatest element on right side - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org