saurabh73
3/21/2020 - 12:02 PM

Leetcode Week 3

package platform.leetcode.problem0011;

import base.ISolution;
import common.Entry;
import common.io.input.InputReader;

import java.io.InputStream;
import java.util.Stack;

/**
*
* @author Saurabh Dutta
* @see <a href="https://leetcode.com/problems/minimum-remove-to-make-valid-parentheses/">https://leetcode.com/problems/minimum-remove-to-make-valid-parentheses/</a> 
*
**/
public class MinimumRemoveValidParenthesis implements ISolution {

    @Override
    public void solve(InputStream in) throws Exception{
        InputReader reader = new InputReader(in);
        String input = reader.readLine();
        String output = minRemoveToMakeValid(input);
        System.out.println(output);
    }

    @Entry
    public String minRemoveToMakeValid(String input) {
        char[] arr = input.toCharArray();
        Stack<Character> bracketStack =  new Stack<>();
        StringBuilder output = new StringBuilder();
        for (int i=0;i < arr.length; i++){
            char c = arr[i];
            if (c == '(' ) {
                bracketStack.push(c);
                output.append('_');
            } else if (c == ')') {
                if (!bracketStack.empty()) {
                    Character bracketPair = bracketStack.pop();
                    int index = output.lastIndexOf("_");
                    output.deleteCharAt(index);
                    output.insert(index, bracketPair);
                    output.append(c);
                }
            } else {
                output.append(c);
            }
        }


        return output.toString().replace("_", "");

    }
}
package platform.leetcode.problem0012;

import base.ISolution;
import common.Entry;
import common.io.input.InputReader;
import common.io.utils.Utility;

import java.io.InputStream;


/**
 * @author Saurabh Dutta
 * @see <a href="https://leetcode.com/problems/sort-colors/">https://leetcode.com/problems/sort-colors/</a>
 **/
public class SortColors implements ISolution {

    @Override
    public void solve(InputStream in) throws Exception {
        InputReader reader = new InputReader(in);
        String line = reader.readLine();
        int[] nums = Utility.getIntArray(line);
        sortColors(nums);
        Utility.printArray(nums);
    }

    @Entry
    public void sortColors(int[] nums) {
        sort(nums, 0, nums.length -1);
    }


    void sort(int[] arr, int low, int high) {
        if (low < high) {
            int pi = partition(arr, low, high);
            sort(arr, low, pi - 1);
            sort(arr, pi + 1, high);
        }
    }


    int partition(int[] arr, int low, int high) {
        int pivot = arr[high];
        int i = (low - 1); // index of smaller element
        for (int j = low; j < high; j++) {
            // If current element is smaller than the pivot
            if (arr[j] < pivot) {
                i++;
                Utility.swap(arr, i, j);
            }
        }
        Utility.swap(arr, i+1, high);
        return i + 1;
    }
}