diff --git a/GeeksForGeeks/20-1-24/GFG.java b/GeeksForGeeks/20-1-24/GFG.java new file mode 100644 index 0000000..997d8b3 --- /dev/null +++ b/GeeksForGeeks/20-1-24/GFG.java @@ -0,0 +1,135 @@ +//{ Driver Code Starts +//Initial Template for Java + +import java.util.*; +import java.io.*; + +class Node { + int data; + Node left; + Node right; + Node(int data) { + this.data = data; + left = null; + right = null; + } +} class GfG { + public static Node buildTree(String str) { + + if (str.length() == 0 || str.charAt(0) == 'N') { + return null; + } + + String ip[] = str.split(" "); + // Create the root of the tree + Node root = new Node(Integer.parseInt(ip[0])); + // Push the root to the queue + + Queue queue = new LinkedList<>(); + + queue.add(root); + // Starting from the second element + + int i = 1; + while (queue.size() > 0 && i < ip.length) { + + // Get and remove the front of the queue + Node currNode = queue.peek(); + queue.remove(); + + // Get the current node's value from the string + String currVal = ip[i]; + + // If the left child is not null + if (!currVal.equals("N")) { + + // Create the left child for the current node + currNode.left = new Node(Integer.parseInt(currVal)); + // Push it to the queue + queue.add(currNode.left); + } + + // For the right child + i++; + if (i >= ip.length) break; + + currVal = ip[i]; + + // If the right child is not null + if (!currVal.equals("N")) { + + // Create the right child for the current node + currNode.right = new Node(Integer.parseInt(currVal)); + + // Push it to the queue + queue.add(currNode.right); + } + i++; + } + + return root; + } + + + public static void main(String[] args) throws IOException { + BufferedReader br = + new BufferedReader(new InputStreamReader(System.in)); + + int t = Integer.parseInt(br.readLine().trim()); + + while (t-- > 0) { + + String s = br.readLine(); + Node root = buildTree(s); + + Solution ob=new Solution(); + System.out.println( ob.distributeCandy(root)); + + } + } +} +// } Driver Code Ends + + +//User function Template for Java + +/* +class Node { + int data; + Node left; + Node right; + Node(int data) { + this.data = data; + left = null; + right = null; + } +}*/ + + +class Solution +{ + static int ans; + + public static int distributeCandy(Node root) + { + //code here + ans = 0; + helper(root); + return ans; + } + + + private static int helper(Node root) + { + if (root == null) + return 0; + + int l = helper(root.left); + + int r = helper(root.right); + + ans += Math.abs(l) + Math.abs(r); + + return root.data + l + r - 1; + } +} diff --git a/GeeksForGeeks/20-1-24/README.md b/GeeksForGeeks/20-1-24/README.md new file mode 100644 index 0000000..722dfdc --- /dev/null +++ b/GeeksForGeeks/20-1-24/README.md @@ -0,0 +1,2 @@ +Time complexity - O(n) +Space complexity - O(h) diff --git a/LeetCode/20-1-24/README.md b/LeetCode/20-1-24/README.md new file mode 100644 index 0000000..7384c4b --- /dev/null +++ b/LeetCode/20-1-24/README.md @@ -0,0 +1,2 @@ +Time complexity - O(n) +Space complexity - O(n) diff --git a/LeetCode/20-1-24/Solution.java b/LeetCode/20-1-24/Solution.java new file mode 100644 index 0000000..c2147c1 --- /dev/null +++ b/LeetCode/20-1-24/Solution.java @@ -0,0 +1,38 @@ +class Solution +{ + public int sumSubarrayMins(int[] arr) + { + final int kMod = 1_000_000_007; + final int n = arr.length; + long ans = 0; + + int[] prevMin = new int[n]; + int[] nextMin = new int[n]; + Deque stack = new ArrayDeque<>(); + + Arrays.fill(prevMin, -1); + Arrays.fill(nextMin, n); + + for (int i = 0; i < arr.length; ++i) + { + while (!stack.isEmpty() && arr[stack.peek()] > arr[i]) + { + final int index = stack.pop(); + nextMin[index] = i; + } + + if (!stack.isEmpty()) + prevMin[i] = stack.peek(); + + stack.push(i); + } + + for (int i = 0; i < arr.length; ++i) + { + ans += (long) arr[i] * (i - prevMin[i]) * (nextMin[i] - i); + ans %= kMod; + } + + return (int) ans; + } +}