From 24434f257a336ae7496dffe70caa37a0463f5eec Mon Sep 17 00:00:00 2001 From: Tanmay-312 Date: Sun, 31 Mar 2024 23:35:24 +0530 Subject: [PATCH] Added codes for 31 March --- GeeksForGeeks/March/31-3-24/GFG.java | 135 ++++++++++++++++++++++++++ GeeksForGeeks/March/31-3-24/README.md | 2 + LeetCode/March/31-3-24/README.md | 2 + LeetCode/March/31-3-24/Solution.java | 23 +++++ 4 files changed, 162 insertions(+) create mode 100644 GeeksForGeeks/March/31-3-24/GFG.java create mode 100644 GeeksForGeeks/March/31-3-24/README.md create mode 100644 LeetCode/March/31-3-24/README.md create mode 100644 LeetCode/March/31-3-24/Solution.java diff --git a/GeeksForGeeks/March/31-3-24/GFG.java b/GeeksForGeeks/March/31-3-24/GFG.java new file mode 100644 index 0000000..d231eb7 --- /dev/null +++ b/GeeksForGeeks/March/31-3-24/GFG.java @@ -0,0 +1,135 @@ +//{ Driver Code Starts +// Initial Template for Java + +import java.io.*; +import java.util.*; +import java.util.LinkedList; +import java.util.Queue; + +class Node { + int key; + Node left; + Node right; + + Node(int x) { + this.key = x; + left = null; + right = null; + } +} + +class GfG { + + 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()); + + while (t > 0) { + String s = br.readLine(); + int N = Integer.parseInt(br.readLine()); + Node root = buildTree(s); + Solution g = new Solution(); + System.out.println(g.findMaxForN(root, N)); + t--; + } + } +} + +// } Driver Code Ends + + +// User function Template for Java + +/*class Node +{ + int key; + Node left, right; + + Node(int x) + { + key = x; + left = right = null; + } + +}*/ +class Solution +{ + static int max=-1; + + public static int findMaxForN(Node root, int n) + { + traverse(root,n); + int ans = max; + max = -1; + return ans; + } + + public static void traverse(Node root,int n) + { + if(root==null) + return; + + traverse(root.left,n); + if(root.key>max&&root.key<=n) + max = root.key; + + traverse(root.right,n); + } +} diff --git a/GeeksForGeeks/March/31-3-24/README.md b/GeeksForGeeks/March/31-3-24/README.md new file mode 100644 index 0000000..7384c4b --- /dev/null +++ b/GeeksForGeeks/March/31-3-24/README.md @@ -0,0 +1,2 @@ +Time complexity - O(n) +Space complexity - O(n) diff --git a/LeetCode/March/31-3-24/README.md b/LeetCode/March/31-3-24/README.md new file mode 100644 index 0000000..9567f26 --- /dev/null +++ b/LeetCode/March/31-3-24/README.md @@ -0,0 +1,2 @@ +Time complexity - O(n) +Space complexity - O(1) diff --git a/LeetCode/March/31-3-24/Solution.java b/LeetCode/March/31-3-24/Solution.java new file mode 100644 index 0000000..bbf2b40 --- /dev/null +++ b/LeetCode/March/31-3-24/Solution.java @@ -0,0 +1,23 @@ +class Solution +{ + public long countSubarrays(int[] nums, int minK, int maxK) + { + long ans = 0; + int j = -1; + int prevMinKIndex = -1; + int prevMaxKIndex = -1; + + for (int i = 0; i < nums.length; ++i) + { + if (nums[i] < minK || nums[i] > maxK) + j = i; + if (nums[i] == minK) + prevMinKIndex = i; + if (nums[i] == maxK) + prevMaxKIndex = i; + ans += Math.max(0, Math.min(prevMinKIndex, prevMaxKIndex) - j); + } + + return ans; + } +}