Aaps Assignment
Aaps Assignment
A prefix sum array stores cumulative sums so you can answer range sum queries in O(1)
time after preprocessing.
🔹 Java Code:
if (L == 0) return prefix[R];
return prefix[R] - prefix[L - 1];
}
🔹 Java Code:
return -1;
}
public static void main(String[] args) {
int[] arr = {-7, 1, 5, 2, -4, 3, 0};
System.out.println("Equilibrium Index: " +
findEquilibrium(arr)); // Output: 3
}
}
return false;
}
public static void main(String[] args) {
while (set.contains(s.charAt(right))) {
set.remove(s.charAt(left++));
}
set.add(s.charAt(right));
maxLen = Math.max(maxLen, right - left + 1);
}
return maxLen;
}
🔹 Time: O(n)
🔹 How It Works:
🔹 Used in:
🔹 Java Code:
public static String longestPalindrome(String s) {
if (s == null || s.length() < 1) return "";
int start = 0, end = 0;
for (int i = 0; i < s.length(); i++) {
🔹 Time: O(n^2)
🔹 Space: O(1)
9. Longest Common Prefix (LCP)
🔹 Java Code:
🔹 Time: O(n * m)
🔹 Space: O(1)
🔹 Space: O(n)
🔹 Time: O(n)
🔹 Space: O(1)
import java.util.Arrays;
public class NextPermutation {
int i = nums.length - 2;
if (i >= 0) {
int j = nums.length - 1;
while (nums[j] <= nums[i]) j--;
swap(nums, i, j);
}
🔹 Time: O(n)
🔹 Space: O(1)
🔹 Java Code:
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public class MergeSortedLists {
public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(-1), tail = dummy;
}
}
🔹 🔹Time: O(n + m)
Space: O(1)
🔹 Java Code:
🔹 Time: O(log(min(m,n)))
🔹 Space: O(1)
🔹 Java Code:
return low;
}
public static void main(String[] args) {
int[][] matrix = {
{1, 5, 9},
{10, 11, 13},
{12, 13, 15}
};
System.out.println(kthSmallest(matrix, 8)); // 13
}
}
🔹 Space: O(1)
}
public static void main(String[] args) {
🔹 🔹Time: O(n)
Space: O(1)
🔹 Java Code:
🔹 Time: O(n)
🔹 Space: O(1)
🔹 Java Code:
import
java.util.HashSet;
public class MaxXOR {
if (set.contains(temp ^ prefix)) {
max = temp;
break;
}
}
}
return max;
}
public static void main(String[] args) {
🔹 Time: O(n)
🔹 Space: O(n)
Time: O(n)
Space: O(1)
🔹 Java Code:
uniqueDigits *= available;
res += uniqueDigits;
available--;
}
return res;
}
public static void main(String[] args) {
System.out.println(countNumbersWithUniqueDigits(2)); // 91
}
}
🔹 Time: O(n)
🔹 Space: O(1)
,
Java Code:
Code: .
public boolean isPowerOfTwo(int n)
{
return n > 0 && (n & (n - 1)) == 0;
Java Code:
class TrieNode {
Explanation: Bit manipulation deals with bitwise operations (AND, OR, XOR, NOT, shift). It is
efficient in time and memory, widely used in low-level programming, optimization, and
competitive coding.
Advantages:
• Constant-time operations
• Efficient data compression
• Can solve tricky problems with elegance (e.g., XOR to find duplicates)
Java Code:
public int[] nextGreaterElements(int[] nums) {
Java Code: n
public ListNode removeNthFromEnd(ListNode head, int n) {
Java Code:
Java Code:
class TwoStacks {
int[] arr;
int top1, top2;
TwoStacks(int size) {
arr = new int[size];
top1 = -1;
top2 = size;
}
void push1(int x) {
if (top1 + 1 < top2)
arr[++top1] = x;
}
void push2(int x) {
int pop2() {
return top2 < arr.length ? arr[top2++] : -1;
} }
Java Code:
Java Code:
public int largestRectangleArea(int[] heights)
{
• Maximum/Minimum in window
• Longest substring without repeating characters
• Average of subarrays
34. Subarray Sum Equals K (Hashing)
Code:
public int subarraySum(int[] nums, int k)
{
Java Code:
public int[] topKFrequent(int[] nums, int k)
{
}
private void backtrack(List<List<Integer>> res, List<Integer> temp,
int[] nums, int start) {
res.add(new ArrayList<>(temp));
for (int i = start; i < nums.length; i++) {
temp.add(nums[i]);
backtrack(res, temp, nums, i + 1);
temp.remove(temp.size() - 1);
}
}
Time Complexity: O(2^n)
Space Complexity: O(2^n)
if (target == 0) {
res.add(new ArrayList<>(temp));
return;
}
for (int i = start; i < candidates.length; i++) {
if (candidates[i] > target) continue;
temp.add(candidates[i]);
backtrack(candidates, target - candidates[i], i, temp, res);
temp.remove(temp.size() - 1);
}
}
Java Code:
{
if (start == nums.length) {
List<Integer> temp = new ArrayList<>();
for (int num : nums) temp.add(num);
res.add(temp);
return;
}
for (int i = start; i < nums.length; i++) {
swap(nums, i, start);
backtrack(nums, start + 1, res);
swap(nums, i, start);
}
}
private void swap(int[] nums, int i, int j) {
Explanation:
Key Differences:
• Count of permutations: n!
Java Code:
public int maxFrequencyElement(int[] nums)
{
Map<Integer, Integer> map = new HashMap<>();
int maxFreq = 0, element = nums[0];
for (int num : nums) {
int freq = map.getOrDefault(num, 0) + 1;
map.put(num, freq);
if (freq > maxFreq) {
maxFreq = freq;
element = num;
}
}
return element;
}
Java Code:
public int maxSubArray(int[] nums) {
Time: O(n)
Space: O(1)
Example: [-2,1,-3,4,-1,2,1,-5,4] → 6
Concept:
Use DP to store max sum ending at each index.
DP Relation:
dp[i] = max(nums[i], dp[i-1] + nums[i])
Java Code:
java
Java Code:
Time: O(n)
Space: O(n)
Time: O(n²)
Space: O(1)
Concept:
Java Code:
java
Time: O(n)
Space: O(1)
java
Time: O(m + n)
Space: O(1)
Applications:
• Load balancing
• Stock span analysis
• Partition-based problems
Approach:
Use total sum and subtract prefix while iterating.