Skip to main content

Replace Elements with Greatest Element on Right Side in Java

Replace Elements with Greatest Element on Right Side Leetcode Solution in Java

Problem Description :-

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.

Example 1:

Input: arr = [17,18,5,4,6,1]
Output: [18,6,6,6,1,-1]
Explanation: 
- index 0 --> the greatest element to the right of index 0 is index 1 (18).
- index 1 --> the greatest element to the right of index 1 is index 4 (6).
- index 2 --> the greatest element to the right of index 2 is index 4 (6).
- index 3 --> the greatest element to the right of index 3 is index 4 (6).
- index 4 --> the greatest element to the right of index 4 is index 5 (1).
- index 5 --> there are no elements to the right of index 5, so we put -1.

Example 2:

Input: arr = [400]
Output: [-1]
Explanation: There are no elements to the right of index 0.

So, lets see solution of above problem.

Solution 1

class Solution {
    
    public int[] replaceElements(int[] array) {
    
        int max = -1;
       
        //Loop from right to left
        for (int i = array.length-1; i >= 0; i--) {
           
            // Getting current value
            int current = array[i];
            array[i] = max;
           
            // If current value is greater than max, 
            // then store current array value to max variable.
            if (current > max) {
                max = current;
            }
        }
        return array;
    }
}

Explanation :-

array = [17, 18, 5, 4, 6, 1]

  • Define max variable with -1. So we can put -1 at last index of array. (As per problem solution).
  • Traverse array from Right to Left using for loop.
    • i = 5
      • Getting current array index value. 
      • current = 1.
      • Add max variable value to array current index.
      • array[5] = -1.
      • array = [17, 18, 5, 4, 6, -1].
      • Checking if condition | current > max
      • 1 > -1 becomes true
        • Store current value to max variable.
        • max = 1 
    •  i = 4, array = [17, 18, 5, 4, 6, -1], max = 1, current = 1.
      • current = 6.
      • array[4] = 1.
      • 6 > 1 becomes true. | max = 6.
    •  i = 3, array = [17, 18, 5, 4, 1, -1], max = 6, current = 6.
      • current = 4.
      • array[3] = 6.
      • 4 > 6 becomes false.
    •  i = 2, array = [17, 18, 5, 6, 1, -1], max = 6, current = 4.
      • current = 5.
      • array[2] = 6.
      • 5 > 6 becomes false.
    •  i = 1, array = [17, 18, 6, 6, 1, -1], max = 6, current = 5.
      • current = 18.
      • array[1] = 6.
      • 18 > 6 becomes true. | max = 18.
    •  i = 0, array = [17, 6, 6, 6, 1, -1], max = 18, current = 18.
      • current = 17.
      • array[0] = 18.
      • 18 > 17 becomes false.
  •  array = [18, 6, 6, 6, 1, -1].

Solution 2  

class Solution {
    
    public int[] replaceElements(int[] array) {
    

        for (int i = 0; i < array.length-1; i++) {
            int max = 0;
            for (int j = i+1; j < array.length; j++) {
               
                if (array[j] > max){
                    max = array[j];
                }
            }
            array[i] = max;
        }

        array[array.length-1] = -1;

        return array;   
    }
}
      

Explanation :-

  • Traverse array from left to right using for loop.
  • Traverse array from left to right using for loop. Start array from outer index + 1 (i + 1).
  • Check if inner array value is greater than max value or not. If it is greater then, put array[j] value into max.
  • After end of inner loop, put max value in current outer index.
  • At last, put -1 into last array index. (As per problem description).
  • Return array.


Happy Coding.

Other articles you may like :-

Comments

Popular posts from this blog

Queen's Attack II HackerRank Solution in Java with Explanation

Queen's Attack II Problem's Solution in Java (Chessboard Problem)   Problem Description : You will be given a square chess board with one queen and a number of obstacles placed on it. Determine how many squares the queen can attack.  A queen is standing on an n * n chessboard. The chess board's rows are numbered from 1 to n, going from bottom to top. Its columns are numbered from 1 to n, going from left to right. Each square is referenced by a tuple, (r, c), describing the row r and column c, where the square is located. The queen is standing at position (r_q, c_q). In a single move, queen can attack any square in any of the eight directions The queen can move: Horizontally (left, right) Vertically (up, down) Diagonally (four directions: up-left, up-right, down-left, down-right) The queen can move any number of squares in any of these directions, but it cannot move through obstacles. Input Format : n : The size of the chessboard ( n x n ). k : The number of obstacles...

Simple Text Editor HackerRank Solution in Java with Explanation

Simple Text Editor HackerRank Solution in Java with Explanation Problem Description : Implement a simple text editor. The editor initially contains an empty string S. Perform Q operations of the following 4 types: append (W) - Append string W to the end of S. delete (k) - Delete the last K characters of S. print (k) - Print the kth character of S. undo () - Undo the last (not previously undone) operation of type 1 or 2, reverting S to the state it was in prior to that operation. Example : Input : S = "abcde" Operations = ["1 fg", "3 6", "2 5", "4", "3 7", "4", "3 4"] index   S          ops[index]    explanation -----   ------     ----------    ----------- 0       abcde      1 fg          append fg 1       abcdefg    3 6        ...